我有一个简单的功能:
(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
我的想法是,与其评估funcallin 到位然后将返回值传递给,不如ifelse将整个funcall传递到未评估的ifelse- 但是,如何在函数中处理带引号的形式?它不会本质上被原地复制,然后被视为真正的 Lisp 形式吗?