Next: 8 クロージャによる結果記憶型関数(memoization)の実現
Up: ソフトウェア第三 講義資料 クロージャ,スコープ,遅延評価,オブジェクト,立体モデル
Previous: 6 リードマクロ
シンボルの関数定義は,symbol-functionを用いてアクセスする
ことができ,setfによってその関数定義を代入することも可能
となる.
> (defun test (x) (* x x))
TEST
> (symbol-function 'test)
#<CLOSURE TEST (X) (DECLARE (SYSTEM::IN-DEFUN TEST))
(BLOCK TEST (* X X))>
> (setq a (symbol-function 'test))
#<CLOSURE TEST (X) (DECLARE (SYSTEM::IN-DEFUN TEST))
(BLOCK TEST (* X X))>
> (funcall a 2)
4
> (test 3)
9
> (setf (symbol-function 'test2) a)
#<CLOSURE TEST (X) (DECLARE (SYSTEM::IN-DEFUN TEST))
(BLOCK TEST (* X X))>
> (test2 4)
16
これにより,test2をtestと同様に定義したことになる.
generated through LaTeX2HTML. M.Inaba 平成18年5月7日