题
我尝试写一个(简单,即没有 eqan?
) one?
像这样的函数:
(define one?
(lambda (n)
((= 1 n))))
但上面的方法不起作用,因为当我这样称呼它时:
(one? 1)
我收到这个错误:
procedure application: expected procedure, given: #t (no arguments)
正确的做法(来自 小阴谋家)写成:
(define one?
(lambda (n)
(cond
(else (= 1 n)))))
为什么需要使用 cond
与 else
子句,而不仅仅是返回 (= 1 n)
?
解决方案
您没有任何理由想要这样做。当我回家时,我会检查我的 TLS 副本,看看我是否能推测出发生了什么,但您不会错过任何基本信息 cond
或任何东西。
对您上面的注释的回复:它不起作用,因为 lambda 主体中有一组额外的括号。它应该是
(lambda (n) (= 1 n))
您的版本中的额外括号意味着而不是返回值 #t
或者 #f
, ,您尝试将该值作为不带参数的函数调用。
其他提示
没有副本 小阴谋家 方便,你的例子看起来应该可行。我觉得 cond
是无关的。在 psudeo-C 中,等价的(带条件)是:
int
one(int n)
{
switch (foo) {
default:
return 1 == n;
}
}
不隶属于 StackOverflow