Lisp noob here。在defun使用cond的Lisp评估
CL-USER> (defun my-if (a b c)
(cond (a b)
(t c)))
CL-USER> (my-if t (print 1) (print 2))
1
2
1
如果第一个是真的没想到拿到2,因为在cond
第二条款不应该得到评估:
CL-USER> (cond (t (print 1))
(t (print 2)))
1
1
这是为什么我们需要宏,或我是否犯了一些其他错误?
请注意,这与其他可能熟悉的语言的行为没有任何区别。例如,在类C或类似Java的语言中,定义如下:void my_if(boolean x,type then,type else){if(x){return then; } else {return else; }},在调用my_if(true,print(1),print(2));'你会看到1和2都打印出来。 – 2014-12-02 02:59:05