代码之家  ›  专栏  ›  技术社区  ›  Xaqron

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

  •  1
  • Xaqron  · 技术社区  · 5 年前

    此功能按预期工作:

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

    但咖喱版不管用:

    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 作为一个等待第二个参数的函数,在接收到该参数时返回结果,但调用 左修剪 带第二个参数返回函数。为什么?

    2 回复  |  直到 5 年前
        1
  •  1
  •   Nina Scholz    5 年前

    你需要打电话 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'))
        2
  •  0
  •   Bergi    5 年前

    在咖喱版,你打电话给 leftCharTrim 有两个参数,但只需要一个并返回另一个函数。你也需要调用这个函数。或者只调用部分应用的函数:

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