関数を起動する(最も)一般的な方法は、(ただ)そのリストを評価することです。 evaluator に与えられるリストの car は(全て) 関数オブジェクトを指すものと考えら れ(間接的に指すこともありますが)、アーギュメントに対し適用(訳注:applied to)さ れます。 (呼び出したい)関数が何であるかが前に知られていない(それほど一般的でも ない)場合のために apply と funcall という 2つの関数が与えられています。
関数の起動に関する完全な記述は、セクション 3.2.3 [リストフォーム] 、ページ 26 を参照して下さい。
Function: funcall function &rest arguments
この関数は、 function をアーギュメントのリストに適用し、その結果を返しま す。このリストは(全ての)アーギュメントから作られます。
function は関数 (Lisp 関数もしくは全てのアーギュメントを評価する primitive 関数) でなくてはいけません。特殊フォームやマクロであってはいけません。
(funcall (function list) 1 2 3 '(4 5)) => (1 2 3 (4 5))
Function: apply function arg &rest args
この関数は、最後のアーギュメントを特別に扱う点を除いて funcall と同じで す。リストは、最後のものを除いた(全ての)アーギュメントから作られ、最後のも のはその(訳注:リストの)終りに append されます。
(apply (function list) '(1 2 3 4 5)) => (1 2 3 4 5) (apply (function list) 1 2 3 '(4 5)) => (1 2 3 4 5) (setq f (function list)) => list (apply f 1 2 3 4 '(5)) => (1 2 3 4 5) (apply (function list) 1 2 3 4 5) -> ERROR: Wrong type argument: listp, 5 (apply (function and) t nil) => ERROR: Invalid function: #<subr and>