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")

もう少し詳しい説明