我有一个简单的功能:
(defun ifelse (the-test)
(cond (the-test (format t "passed test, true!"))
(t (format t "failed test, boo hoo"))))
如果我这样做,我会得到你所期望的:
(ifelse (funcall (lambda () nil)))
failed test, boo hoo
NIL
我很好奇为什么这也不会导致“失败”:
CL-USER> (ifelse '(funcall (lambda () nil)))
passed test, true!
NIL
我的想法是,与其评估funcall
in 到位然后将返回值传递给,不如ifelse
将整个funcall
传递到未评估的ifelse
- 但是,如何在函数中处理带引号的形式?它不会本质上被原地复制,然后被视为真正的 Lisp 形式吗?