我已经开始理解一些与柯里化相关的例子,但我仍然对柯里化的概念感到不满意。我知道柯里化可用于进行部分评估,但我不确定它在某些情况下如何工作。
我知道它在下面的示例中是如何工作的:
fun funkyPlus x y = x*x+y;
所以假设我们只为 x 传递一个参数,那么它等价于以下内容:
fun funkyPlus 3 = (fn x => fn y => x*x+y)3
最终返回
fn y => 9+y
现在,我正在尝试将这个想法应用于内置函数foldl
。
我知道它的代码是:
fun foldl f b [] = b
|foldl f b (h::t) = foldl f f(h,b) t.
我的问题是,如果我们不将所有参数传递给foldl
(即我们只传递第一个参数,即函数('a*'b->'b)
)怎么办。在我给出的第一个例子中,当只有一个参数被传递给它时,很容易看到函数是如何工作的。foldl
但是,当只有一个参数传递给它时,我很难看到它是如何工作的。
帮助。