javascript - 部分应用程序在递归函数中不起作用

标签 javascript recursion currying

此函数按预期工作:

const leftCharTrim = (c, s) => s.charAt(0) === c ? leftCharTrim(c, s.slice(1)) : s
console.log(leftCharTrim('a', 'abc'))

但是柯里化(Currying)版本不起作用:

const leftCharTrim = c => s => s.charAt(0) === c ? leftCharTrim(c, s.slice(1)) : s
const leftTrim = leftCharTrim('a') // partially applied
console.log(leftTrim('abc'))

由于 leftCharTrim 已收到其第一个参数,我希望 leftTrim 是一个等待第二个参数的函数,并在收到它后返回结果,但调用 leftTrim 第二个参数返回一个函数。为什么?

最佳答案

您需要再次使用该字母调用 leftCharTrim,然后使用第二个参数。

const leftCharTrim = c => s => s.charAt(0) === c ? leftCharTrim(c)(s.slice(1)) : s
//                                                             ^^^
const leftTrim = leftCharTrim('a') // partially applied
console.log(leftTrim('abc'))

关于javascript - 部分应用程序在递归函数中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57778216/

相关文章:

javascript - YouTube - 如何只播放没有音频的视频?

sql - 将平面表解析为树的最有效/优雅的方法是什么?

c++ - 返回捕获局部变量的 lambda

scala - Scala 中的柯里化(Currying)示例

javascript - 自动关闭警报不发出警报

javascript - CKEditor 5 在元素上设置样式

java - 带递归排序的 StackOverFlowError

c++ - 如何避免递归函数的堆栈溢出?

functional-programming - Perl 6 - Curried 函数挂起

javascript - Socket.Io 如何从套接字实例(包括发送者)向房间中的所有成员发送信息