Функциональное программирование без дополнительных параметров - PullRequest
0 голосов
/ 04 июля 2018

Представьте, что у меня уже есть функции count, split и pipe. У меня есть функция трубы:

const pipe = (f1, ...fns) => (...args) => {
  return fns.reduce((res, fn) => fn(res), f1.apply(null,args));
};

Это обычная функция:

const getLen = str => count(split('', str))

Это функция без точек

const getLen = pipe(split(''), count)

Есть ли способ заставить его работать более чем на 1 параметр.

Например, у меня есть функция диапазона ( обратите внимание, что она автоматически каррируется ):

const range = from => to => step => ...

Как создать функцию, которая возвращает сумму диапазона, но не содержит точек.

const getSum = pipe(
   range(), // i dont know how to get parameters if its pointfree
   sum
)

1 Ответ

0 голосов
/ 04 июля 2018

Трубы - это композиции унарных функций или функций просто аргумента. Нет способа передать функции с аргументами, превышающими аргумент, поскольку вы получаете входные данные и передаете выходные данные следующей функции и т. Д.

Итак, если вы хотите использовать range, вам необходимо сначала указать аргумент from:

const getSum = pipe(
   range(1),
   sum
)

Другими словами, вы можете использовать функции более чем одного аргумента, но вам нужно будет использовать частичное приложение для получения желаемого результата. Нет проблем с выдачей range без аргументов, но результатом является частичное применение, и это не то, что вы ожидаете от вывода pipe.

...