方案:为什么需要在这里使用cond?

And*_*ech 3 scheme the-little-schemer

我试着写一个(简单的,即没有eqan?)one?这样的函数:

(define one?
  (lambda (n)
    ((= 1 n))))
Run Code Online (Sandbox Code Playgroud)

但是上面的方法不起作用,因为当我这样称呼时:

(one? 1)
Run Code Online (Sandbox Code Playgroud)

我得到了这个错误:

procedure application: expected procedure, given: #t (no arguments)
Run Code Online (Sandbox Code Playgroud)

正确的方法(来自The Little Schemer)编写它是:

(define one?
  (lambda (n)
    (cond
      (else (= 1 n)))))
Run Code Online (Sandbox Code Playgroud)

为什么需要使用cond带有else子句而不仅仅是返回(= 1 n)

mqp*_*mqp 6

您没有任何理由想要这样做.当我回到家时,我会查看我的TLS副本,看看我是否可以判断正在发生什么,但你不会错过任何基本的cond或任何事情.

回复上面的注释:它没有用,因为你在lambda的主体中有一组额外的括号.它应该是

(lambda (n) (= 1 n))
Run Code Online (Sandbox Code Playgroud)

在您的版本额外的括号意味,而不是返回值#t或者#f,你试图调用该值作为不带参数的函数.

  • ...哦不,我刚刚意识到,如果我在询问问题之前看了5cm的页面,我会在书的同一页上看到`one?`函数没有`cond`; 学习到教训了. (2认同)