Рамда: Как перевести обычное приложение в трубу или сочинить - PullRequest
0 голосов
/ 20 февраля 2019

Это вопрос новичка (я все еще плохо знаком с Рамдой и функциональным программированием в целом).

У меня есть функция с двумя аргументами.Для простоты давайте предположим, что это просто вычитает числа.Я хочу перевернуть и показать свои аргументы.Я понял, как сделать это вручную, но на самом деле такое чувство, что это можно сделать с помощью pipe или compose, и я не могу понять, как это сделать.

import { curry, flip, pipe } from 'ramda';

const subtract = (a, b) => a - b; // subtract(1, 4); -3
const flippedCurriedSubtract = flip(curry(subtract))
// flippedCurriedSubtract(1)(4); 3

pipe(flip, curry, subtract)(1)(4); // NaN

Как бы вы сделали это с pipe или compose?

РЕДАКТИРОВАТЬ:

pipe(
    curry,
    flip
)(subtract); // works

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Насколько я знаю, большинство функций в Рамде уже карри.Поэтому вам не нужно снова вычитать карри.

subtract(5, 10); //=> -5
subtract(5)(10); //=> -5

Вы можете flip это, оно все равно будет карри:

flip(subtract)(5, 10); //=> 5
flip(subtract)(5)(10); //=> 5

Я не думаю, что вам нужна трубаи вообще, можно сделать следующее:

const flippedSubtract = flip(subtract);
flippedSubtract(5)(10); //=> 5

Скотт указал в комментариях, что flip автоматически выполнит функцию без карри: (очень полезно)

const foo = (a, b, c) => `foo: ${a}${b}${c}`;
foo('x', 'y', 'z');       //=> 'foo: xyz'
flip(foo)('x')('y')('z'); //=> 'foo: yxz'
0 голосов
/ 20 февраля 2019

pipe(flip, curry, subtract)(1)(4) равно subtract(curry(flip(1)(4)))

Между тем определение flip:

// flip :: (a -> b -> c) -> b -> a -> c 
const flip = curry((fn, a, b) => fn(b, a));

Это означает, что функция flip получит функцию curry (a -> b -> c) в качестве параметра, но теперь это число затем вызывает ошибку.

pipe(curry,flip)(subtract) равно flip(curry(subtract)), и это будет соответствовать.Он также возвращает то же самое с .compose(flip, curry)(subtract).compose и pipe - это то же самое, что и функция направления выполнения.

И для новичка.Я рекомендую вам прочитать эту книгу

...