% Function FUNCALL
Function FUNCALL
funcall
function &rest args => result*
function - 関数指定子
args - functionの引数
result - functionの返却値
funcall
は、argsを引数にfunctionを実行します。
もしfunctionがシンボルなら、
functionをグローバル環境下の関数の値として探したものを
強制的に変換します。
(funcall #'+ 1 2 3) => 6
(funcall 'car '(1 2 3)) => 1
(funcall 'position 1 '(1 2 3 2 1) :start 1) => 4
(cons 1 2) => (1 . 2)
(flet ((cons (x y) `(kons ,x ,y)))
(let ((cons (symbol-function '+)))
(funcall #'cons
(funcall 'cons 1 2)
(funcall cons 1 2))))
=> (KONS (1 . 2) 3)
なし。
functionがシンボルであり、
それがグローバル定義の関数を持たなかったときか、
あるいはグローバルなマクロか特殊オペレーターであったときは、
型undefined-function
のエラーが発生します。
(funcall function arg1 arg2 ...)
== (apply function arg1 arg2 ... nil)
== (apply function (list arg1 arg2 ...))
funcall
と通常の関数呼び出しの違いは、
前者はフォームの通常の評価によってfunctionを取得しますが、
後者は普通に起こる関数の位置の特別な解釈によって得られます。