使用Ramda形式f(x)(g(x))的函数组合

时间:2017-10-04 23:32:01

标签: javascript functional-programming ramda.js pointfree

我无法使用Ramda中可用的函数找出f(x)(g(x))的变换。我希望理想的是R.something(f, g)(x)之类的东西 - 只要x只出现一次并且是最后的论据。

f是一个函数x,它返回一个函数

g是一个取x的函数,它返回一个值

我已经尝试了pipecomposechain,但是我猜得非常努力,而且没有人能够工作。我最近问了一个类似的问题,我很想知道一个有大量有用身份的资源,如果存在,所以我不需要继续问SO:)

1 个答案:

答案 0 :(得分:2)

chain已关闭:它在函数上执行chain(f, g)(x) == f(g(x))(x)。因此,您只需在将f传递给chain之前翻转R.chain(R.flip(f), g)(x)

const something = R.compose(R.chain, R.flip)
something(f, g)(x)

import numpy as np

# given group counts:       3            4           3         2
# given flattened data:[ 0, 1, 2,   3, 4, 5, 6,   7, 8, 9,   10, 11 ]

group_counts = np.array([3,4,3,2])
data = np.arange(group_counts.sum()) # placeholder data, real life application will be a very large array