curried函数中的反向参数顺序(ramda js)

时间:2017-05-24 09:55:15

标签: functional-programming ramda.js

我有一个更高阶的功能:让我们说简单

const divideLeftToRight = x => y => x/y;

我想有一个执行除法的功能,但是从“从右到左”。换句话说,我需要:

const divideRightToLeft = x => y => y/x;

我想过:

const divideRightToLeft = R.curry((x,y) => divideLeftToRight(y)(x));

我想知道是否有更优雅的方式来做到这一点

2 个答案:

答案 0 :(得分:5)

您正在寻找flip function

const divideRightToLeft = R.flip(divideLeftToRight)

答案 1 :(得分:1)

您可以在翻转之前取消使用该功能。 (flip返回一个咖喱​​函数。)

例如

const divideRightToLeft = R.flip(R.uncurryN(2, divideLeftToRight))

或者,您可以定义自定义flipCurried函数:

// https://github.com/gcanti/fp-ts/blob/15f4f701ed2ba6b0d306ba7b8ca9bede223b8155/src/function.ts#L127
const flipCurried = <A, B, C>(fn: (a: A) => (b: B) => C) => (b: B) => (a: A) => fn(a)(b);

const divideRightToLeft = flipCurried(divideLeftToRight)