我尝试写一个(简单,即没有 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)))))

为什么需要使用 condelse 子句,而不仅仅是返回 (= 1 n) ?

有帮助吗?

解决方案

您没有任何理由想要这样做。当我回家时,我会检查我的 TLS 副本,看看我是否能推测出发生了什么,但您不会错过任何基本信息 cond 或任何东西。

对您上面的注释的回复:它不起作用,因为 lambda 主体中有一组额外的括号。它应该是

(lambda (n) (= 1 n))

您的版本中的额外括号意味着而不是返回值 #t 或者 #f, ,您尝试将该值作为不带参数的函数调用。

其他提示

没有副本 小阴谋家 方便,你的例子看起来应该可行。我觉得 cond 是无关的。在 psudeo-C 中,等价的(带条件)是:

int
one(int n)
{     
    switch (foo) {
        default:
           return  1 == n;
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top