如果我使用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))
答案 0 :(得分:2)
cond
和if
是两种截然不同的句法结构。你不能简单地用一个名字替换另一个名字。
如果语法:
(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))