next up previous
Next: 8 クロージャによる結果記憶型関数(memoization)の実現 Up: ソフトウェア第三 講義資料 クロージャ,スコープ,遅延評価,オブジェクト,立体モデル Previous: 6 リードマクロ

7 シンボルの関数定義

シンボルの関数定義は,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日