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