我正在使用SICP讲座和文字来了解我自己的Scheme.我正在看一个练习,上面写着"表达式E的应用是形式的表达式(E E1,... En).这包括n = 0的情况,对应于表达式(E).一个Curried的应用程序E是E的应用或E的Curried应用的应用."
(编辑:我纠正了上面的引用......我最初错误地引用了这个定义.)
任务是定义一个Curried应用程序,该程序的计算结果为3
(define foo1 (lambda (x) (* x x)))
我真的不明白这个想法,阅读关于Curriying的维基百科条目并没有真正帮助.
任何人都可以帮助更清楚地解释这里要求的内容吗?
实际上,即使给我这个问题的答案也会有所帮助,因为在这之后还有五个要解决.......我只是没有得到基本的想法.
另外:即使在Brian Campbell冗长的解释之后,我仍然有点失落.
被(foo1 (sqrt 3)))
认为是foo的应用程序,因此foo的curry应用程序?
似乎太简单了,但也许......
输入(((foo1 2 )) 2)
DrScheme会出现以下错误(我有点期待)
procedure application: expected procedure, given: 4 (no arguments)
重读后什么是Currying?我明白我也可以将foo1重新定义为:
(define (foo1 a) (lambda (b) (* a b)))
那么我就可以打字了
((foo1 3 ) 4)
12
但是这并没有让我更接近于将3作为输出,并且看起来这并不是原来的foo1,它只是重新定义它.
该死的,20年的C编程还没有为此做好准备.:-) :-)
嗯,与通常更清晰的书籍风格相比,这个问题相当混乱.实际上,如果你从这里得到问题,看起来你可能会错误地设置问题集; 这可能会导致你的困惑.
我会为你打破这个定义,有一些例子可以帮助你弄清楚发生了什么.
表达式E的应用是形式(E E1 ... En)的表达.
这是一个应用程序的示例:
(foo 1 2) ; This is an application of foo (bar 1) ; This is an application of bar
这包括n = 0的情况,对应于表达式(E).
(baz) ; This is an application of baz
E的Curried应用程序是E的应用程序或E Cur的Curried应用程序的应用程序...........
这是你错误引用的那个; 以上是我在网上找到的问题集的定义.
这个定义有两半.从第一个开始:
E的Curried应用是E的应用
(foo 1 2) ; (1) A Curried application of foo, since it is an application of foo (bar 1) ; (2) A Curried application of bar, since it is an application of bar (baz) ; (3) A Curried application of baz, since it is an application of baz
或申请E的Curried申请
((foo 1 2) 3) ; (4) A Curried application of foo, since it is an application of (1) ((bar 1)) ; (5) A Curried application of bar, since it is an application of (2) ((baz) 1 2) ; (6) A Curried application of baz, since it is an application of (3) (((foo 1 2) 3)) ; A Curried application of foo, since it is an application of (4) (((bar 1)) 2) ; A Curried application of bar, since it is an application of (5) ; etc...
这会为您提供入门所需的帮助吗?
编辑:是的,(foo1 (sqrt 3))
是Curried的应用程序foo1
; 就这么简单.这不是一个非常好的问题,因为在许多实现中你实际上会得到2.9999999999999996或类似的东西; 除非您的Scheme具有某种精确代数数字的表示,否则不可能有一个将返回3的值.
你的第二个例子确实是一个错误.foo1
返回一个无效的整数.它只是后面的一些示例,其中函数应用程序的应用程序的递归情况是有效的.foo3
例如,看一看.
编辑2:我刚刚检查了SICP,看起来这里的概念直到1.3节才解释,而这个赋值只提到了1.1节.如果你还没有,我建议你仔细阅读1.3节.