関数とは何ですか?
これが発生する理由を理解するには、関数とは何かを知る必要があります。lispフォームを評価するとき(myfunc arg1 arg2 ...)、emacsは最初に何であるかをチェックしmyfuncます。それが関数である場合、EmacsはすべてのLispフォームを評価しarg1、arg2など、その関数を呼び出し、myfunc引数として結果のLispオブジェクトで。
前述のように、andは関数ではなく、特殊な形式であるため、必要に応じて引数を評価できます。以前にコメントで述べたように、フォーム(and nil (drop 'bomb))は(drop 'bomb)評価されないので安全です。
一方、(apply #'and (list nil (drop 'bomb)))あるため、安全ではないapply です関数はEmacsの最初の評価させ、#'and(結果がシンボルである)、そして評価さ(list nil (drop 'bomb)):あなたは次に何が起こるかを推測して、再度、関数呼び出しで、nilその後、評価され(drop 'bomb)、評価されます。
なぜapply文句を言うのですか?
apply特殊なフォーム(またはマクロ)で使用しようとしても意味がありません。特殊なフォームは特殊な動作をすることができないため、エラーをスローします。
and関数ではなく特殊な形式です。