【发布时间】:2018-09-14 19:05:37
【问题描述】:
所以我有一点挑战。
我正在尝试在这里编程:
使用 lambda 演算可以简化为 12。
我有以下方案脚本:
(
define double (
lambda x (
+ (car x) (car x)
)
)
)
(display 'Debug)
(newline)
(display (double 6))
(newline)
(
define getTwelve (
((
(lambda x (
lambda y (
(display y)
(newline)
(x (x y))
)
))
double
) 3)
)
)
(display getTwelve)
(newline)
(newline)
对应这个终端输出:
Debug
12
(3)
application: not a procedure;
expected a procedure that can be applied to arguments
given: '(#<procedure:double>)
arguments...:
'(3)
所以我当然认为'这是因为 double 的参数是一个列表而不是一个数字'但是car y 只是将终端输出的最后一行更改为3。
我想我将Racket 终端输出解释错了,但我不知道是哪种方式。但是还有另一种可能性,即不允许将 lambda 函数作为参数传递给 lambda 函数。
所以我的问题是:它是哪一个?
【问题讨论】:
-
不要在
(之后添加换行符和缩进。这是非常不寻常的 Scheme 风格。 -
注明。我用它来区分 lambda 上的定义和执行,但你是完全正确的。 :)