【问题标题】:Function composition of form f(x)(g(x)) using Ramda使用 Ramda 的形式 f(x)(g(x)) 的函数组合
【发布时间】:2018-03-16 11:39:41
【问题描述】:

我无法使用 Ramda 中提供的函数来计算 f(x)(g(x)) 的转换。理想情况下,我希望像 R.something(f, g)(x) 这样的东西 - 只要 x 只出现一次并且是最后一个参数。

f 是一个采用x 的函数,它返回一个函数

g 是一个采用x 并返回值的函数

我已经尝试过pipe,compose,chain,但是我很难猜到它们都没有工作。我最近问了一个类似的问题,如果存在的话,我很想知道一个具有大量有用身份的资源,所以我不需要继续询问 SO :)

【问题讨论】:

  • 顺便说一句,如果你认为constant = x => y => x 这是一个应用函子。

标签: javascript functional-programming ramda.js pointfree


【解决方案1】:

chain 很接近:它在函数上执行chain(f, g)(x) == f(g(x))(x)。所以你只需要在传递给chain之前翻转f:

R.chain(R.flip(f), g)(x)

或

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

【讨论】:

  • 我自己才意识到这一点!谢谢
  • 我们称之为ap。
  • @ftor 哦。我意识到 R.chain 是 Haskell 的 =<<,但鉴于一切都被翻转了,我认为没有与 (=<<) . flip 等价的东西。您绝对应该发布that 作为答案。
  • @ftor 请将其添加为完整答案:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2017-04-14
  • 2017-04-02
相关资源
最近更新 更多