next up previous
Next: 16 Emacsの中でCLispを走らせる方法 Up: ソフトウェア特論 講義資料 クロージャ,オブジェクト指向 Previous: 15.7 例

練習問題

  1. 以下の実行例を試して返る値を求めよ.
    
    (defun two-funs (x)
        (list (function (lambda () x))
              (function (lambda (y) (setq x y)))))
    (setq funs (two-funs 6))
    <cl> (funcall (car funs)) -> ?
    <cl> (funcall (cadr funs)) -> ?
    <cl> (funcall (car funs)) -> ?
    
  2. (setf g1
          (let ((i 1)
                (r #'(lambda () (setf i 1)))
                (v #'(lambda () (setf i (* i 2)))))
            #'(lambda (a)
                (cond ((eq a 'r) r)
                      ((eq a 'v) v)))))
    
    ということを行なった後、以下の4つを順に実行した それぞれの評価結果を示せ。
    
    (funcall (funcall g1 'v)) ->
    
    (funcall (funcall g1 'v)) ->
    
    (funcall (funcall g1 'r)) ->
    
    (funcall (funcall g1 'v)) ->
    
  3. x がスペシャル変数でない場合に、 (down-foo-1)、(down-foo-2) をそれぞれ評価するとどうなるか。 逆に、x がスペシャル変数の場合にはどうなるか。
    (defun down-foo-1 (x)
      (down-baa '(lambda () (1+ x))))
    (defun down-foo-2 (x)
      (down-baa #'(lambda () (1+ x))))
    (defun down-baa (f) (let ((x 100)) (funcall f)))
    
  4. 次の関数 test を実行するとどういう値が返るか。
    (defun counter (a)
        #'(lambda (b) (setq a (+ a b))))
    (defun test ()
      (setq f1 (counter 1))
      (list
       (funcall f1 1)
       (funcall f1 1)
       (funcall f1 1)
       )
    )
    
  5. 6種類のグラフ記述のどれが与えられても *graph-vertex-list*を得る関数graph-vertex-listを作れ.
  6. 6種類のグラフ記述のどれが与えられても *graph-edge-list*を得る関数graph-edge-listを作れ.
  7. create-universe1,create-universe2を走らせてみよ.
  8. create-universe2のcrashedしているかどうかはどのように判定してい るか.また,クラッシュした後のパーティクルの運動を考慮して状態を変更す るようにメソッドを再定義せよ.


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