簡體   English   中英

用惰性加法器關閉 Function

[英]Closure with a Lazy Adder Function

我遇到了一個問題,它使用閉包 function 將后續函數的 arguments 添加到總和 function 中:

寫一個 function 命名為:lazyAdder(firstNum)。 lazyAdder function 將接受一個數字並返回一個 function。當調用 lazyAdder 返回的 function 時,它將再次接受一個數字,(secondNum),然后返回一個 function。當最后提到的 function 被調用時,(thirdNum) ),它最終會返回一個數字。 請參閱下面的示例!

示例 1:

 let firstAdd = lazyAdder(1); let secondAdd = firstAdd(2); let sum = secondAdd(3); console.log(sum); // prints 6

示例 2:

 let func1 = lazyAdder(10); let func2 = func1(20); let total = func2(3); console.log(total); // prints 33

我試過:

const lazyAdder = f => g => h => x => f(g(h))(h(x));

認為它需要兩個 function 輸入 (firstNum + secondNum = sum1),然后添加第三個 (thirdNum + sum1 = sum2)。 這確實調用了 function 兩次; 但是,它沒有返回總和——它返回了一個匿名的 function。

如果我沒記錯的話,你的任務是對一系列評估進行求和(即在不同時間通過 arguments)。 在非惰性方法中,您只需制作一個 function sum ,它采用 3 個參數xyz並對其求和: sum(1, 2, 3) = 7 現在要以“惰性”方式執行此操作,您必須對這個 function 執行一個名為currying的操作。 我建議閱讀此內容,因為這基本上是所要求的。

柯里化這樣的 function 可以在 JavaScript 中很容易地完成。正如您所展示的,您可以在 function 聲明中鏈接 arguments:

const func = arg1 => arg2 => arg3 => ... // Some logic performed here

現在你可以調用這個 function 3 次,直到它返回閉包以外的東西; 一個值。 您如何確保當您執行func(1)(2)(3)時它返回總和,即 6?

因為我懷疑這是家庭作業,所以我不想給你簡單的答案。 因此,由您來定義應該在 function 中放入什么邏輯來對這些值求和。 重要的是我給出的定義,已經是惰性求值的定義。

暫無
暫無

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

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