next up previous
Next: 5 状態空間探索による問題解決 Up: 4 リストの編集プログラム Previous: 4.6 リスト構造のプリント

4.7 関数定義の編集例

インタプリタの環境で関数を定義するとその本体はリスト構造で表現されている. 関数の本体のリスト構造をleditにより変更すると,その関数の定義自体を 変更することができる.
<cl> (defun test (a) (list a))
TEST 
<cl> (test 1)
(1) 
<cl> (ledit (symbol-function 'test))
E>p
(LAMBDA (A) (BLOCK TEST ...))
E>3
E>p
(BLOCK TEST (LIST A))
E>3
E>p
(LIST A)
E>(n (list a a))
E>pp
(LIST A (LIST A A))
E>top
E>pp
(LAMBDA (A)
  (BLOCK TEST
    (LIST A (LIST A A)))) E>ok
T 
<cl> #'test
(LAMBDA (A) (BLOCK TEST (LIST A (LIST A A)))) 
<cl> (test 1)
(1 (1 1))
*scratch*バッファの中で行った場合の例としては以下のようになる.
(defun test (a) (list a))
test
(test 10)
(10)
(ledit (symbol-function 'test))
e>(lambda (a) (list a))
e>e>(a)
e>e>(lambda (a) (list a))
e>e>(list a)
e>e>(list a a)
e>t
(test 10)
(10 10)


generated through LaTeX2HTML. M.Inaba 平成18年5月7日