我正在使用 SICP 讲座和文本来自己了解 Scheme。我正在看一个练习,上面写着“表达式 E 的应用程序是 (E E1,...En) 形式的表达式。这包括 n=0 的情况,对应于表达式 (E)。Curried 应用程序E 的应用要么是 E 的应用,要么是 E 的 Curried 应用的应用。”
(编辑:我更正了上面的引用......我最初错误地引用了定义。)
任务是定义计算为 3 的过程的 Curried 应用程序
(define foo1
(lambda (x)
(* x x)))
我真的不明白这里的想法,阅读关于 Curriying 的维基百科条目并没有真正帮助。
任何人都可以帮助更清楚地解释这里的要求吗?
实际上,即使给我这个问题的答案也会有所帮助,因为在这个问题之后还有五个要解决。...我只是没有得到基本的想法。
补充:即使在布赖恩坎贝尔冗长的解释之后,我仍然有些迷茫。
被(foo1 (sqrt 3)))
认为是 foo 的应用程序,因此是 foo 的柯里化应用程序?
看起来太简单了,但也许...
输入(((foo1 2 )) 2)
DrScheme 会出现以下错误(我有点预料到)
procedure application: expected procedure, given: 4 (no arguments)
重新阅读什么是柯里化?我知道我也可以将 foo1 重新定义为:
(define (foo1 a)
(lambda (b)
(* a b)))
那么我可以输入
((foo1 3 ) 4)
12
但这并没有真正让我更接近于产生 3 作为输出,而且看起来这并不是真正对原始 foo1 进行柯里化,它只是重新定义它。
该死,20 年的 C 编程并没有让我为此做好准备。:-) :-)