SICP的例子。 cond有效,但如果没有

时间:2017-05-13 08:34:06

标签: scheme sicp mit-scheme

如果我使用SICP第1章中的以下代码,它会给出正确的答案。

(cond ((= a 4) 6) ((= b 4) (+ 6 7 a)) (else 25)) 

打印16

如果我用con替换cond,如果它不起作用

(if ((= a 4)6) ((= b 4) (+ 6 7 a)) (else 25))

给出错误:

The object #f is not applicable.

我做错了什么?为什么不工作?

N.B。这是来自练习1.1的定义:

(define a 3)
(define b (+ a 1))

1 个答案:

答案 0 :(得分:2)

condif是两种截然不同的句法结构。你不能简单地用一个名字替换另一个名字。

如果语法:

(if test
    (then part)
    (else part))

Cond语法:

(cond (test1 form11 ... form1n)
      (test2 form12 ... form2n)
      ...
      (else form1m ... formmn))

所以相当于:

(cond ((= a 4) 6) 
      ((= b 4) (+ 6 7 a))
      (else 25)) 

是:

(if (= a 4)
    6
    (if (= b 4)
        (+ 6 7 a)
        25))