私は動作する単純な関数を持っています:
(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
場で を評価してから戻り値を に渡すのではなくifelse
、全体funcall
が評価されずに に渡されますifelse
-しかし、引用された形式は関数内でどのように扱われますか? それは本質的にその場でコピーされ、真の Lisp フォームとして扱われるのではないでしょうか?