簡體   English   中英

部分應用程序在遞歸函數中不起作用

[英]Partial application doesn't work in recursive function

此功能按預期工作:

 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是等待第二個參數的函數,並且在接收到它后返回結果,但使用第二個參數調用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')) 

在咖喱版本中,您leftCharTrim兩個參數調用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'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM