QUOTEとFUNCTIONを使い分ける - lisp-cookbook-ja/common-lisp GitHub Wiki
QUOTEとFUNCTIONを使い分ける
関数を引数として渡す書法では、function(#')やquote(')が使われますが、使われる状況によって意味合いが変ってくることがあります。
局所関数と大域関数
quoteでは、大域の関数を参照(symbol-functionの値と同じ)しますが、functionではもっとも内側のスコープの関数を参照します。
(defun foo (&rest args)
(format nil "global foo!!! => ~{~A~^ ~}" args))
(defun bar ()
(flet ((foo (&rest args)
(format nil "local foo!!! => ~{~A~^ ~}" args)))
(list
(apply #'foo '(1 2 3))
(apply 'foo '(1 2 3)))))
(bar)
;=> ("local foo!!! => 1 2 3" "global foo!!! => 1 2 3")