next up previous
Next: この文書について... Up: ソフトウェア特論 講義資料 リスト,集合,グラフ,木の処理 Previous: 10.5 探索木表現のデータ変換

練習問題

  1. 次の比較結果がどうなるか調べよ.
    <cl> (eq 2 2)          -> 
    <cl> (eq 2.0 2)        -> 
    <cl> (eql 2.0 2)       -> 
    <cl> (equal 2.0 2)     -> 
    <cl> (equalp 2.0 2)    -> 
    <cl> (= 2.0 2)         -> 
    <cl> (eq 2.0 2.0)      -> 
    <cl> (eql 2.0 2.0)     ->
    
  2. 以下の返る値を求めよ.
    <cl> (char-lessp #\a #\b #\c)
    <cl> (char-lessp #\a #\B #\c)
    <cl> (char-lessp #\A #\a)
    <cl> (char-lessp #\A #\b)
    <cl> (char< #\a #\B #\c)
    <cl> (char< #\A #\a)
    <cl> (char-not-lessp #\c #\a)
    <cl> (char-upcase #\a)
    <cl> (char-upcase #\A)
    
  3. 以下の式を実行した場合の値を記せ.
    1. (append '(a b) '(c d))
    2. (list '(a b) '(c d))
    3. (cons '(a b) '(c d))
    4. (length (cons '(a b) '(c d)))
    5. (length '(cons '(a b) '(c d)))
    6. (reverse '(list '(a b) '(c d)))
    7. (reverse (list '(a b) '(c d)))
    8. (atom nil)
    9. (listp nil)
    10. (consp nil)
  4. 2個のリストデータを連結する関数append2を,cond, null, car, cdr , cons を使って定義せよ.
  5. 任意個のリストデータを連結する関数append*を定義せよ.
  6. 次のようなmysteryという関数を定義した. (mystery '(((a b) c) ((d e) f)))の返す値を答え, mysteryが何を求めるための関数であるかを説明せよ.
    (defun mystery (s)
      (cond ((null s) nil)
            ((atom s) (list s))
            (t (append (mystery (car s))
                       (mystery (cdr s))))))
    
  7. (test)を実行した場合の返る値はどうなるか答えよ.
    (defun test nil
      (setq a '(1 2 3 4)
            b a  c (cddr a) d b e '(3 4))
      (list (eq e (cddr a)) (equal e (cddr a))
            (eq e c) (equal e c)))
    
  8. (cond (a b)), (cond (a b) (c d)), (cond (a) (c d)) のマクロ展開 を行なってみよ.
  9. (unless 条件 . 本体) という形で,条件が成り立たないならば,本体 を実行するというマクロを定義せよ.
  10. 以下のようにcond*をマクロ定義した. (macroexpand '(cond* (a b) (c d) (t e)))が返す値と (macroexpand '(cond* (a) (c d) (t e)))が返す値 のそれぞれを求めよ.この2つから下のマクロ定義がcondとしてふさわしいか どうか説明を加えよ.
    (defmacro cond* (&rest body)
      (cond
       ((null body) nil)
       (t (list 'if (car (car body))
                (cons 'progn (cdr (car body)))
                (cons 'cond* (cdr body))))))
    
  11. whenをifを用いてマクロ定義せよ.
  12. quoteをマクロで定義せよ.
  13. 他の方法でreverseを定義せよ.
  14. :test, :keyの引数をとることができるmemberの定義を示せ.
  15. leditを使ってリスト構造を変更してみよ.
  16. set-difference, set-exclusive-or,subsetpを定義せよ
  17. adjoin,remove-duplicatesを定義せよ
  18. findを定義せよ
  19. eq-classesの定義にまちがいがないかチェックせよ.
  20. eq-classesの定義をtest,keyを与えて利用するように一般化せよ.
  21. equivalent-setsの定義にまちがいがないかチェックせよ.
  22. equivalent-setsをeq-classesを用いて定義できないか.
  23. equivalent-setsをmemberを用いて簡潔に定義できないか考えよ.
  24. equivalent-setsを用いてequivalent-graphsを定義せよ.

next up previous
Next: この文書について... Up: ソフトウェア特論 講義資料 リスト,集合,グラフ,木の処理 Previous: 10.5 探索木表現のデータ変換
generated through LaTeX2HTML. M.Inaba 平成18年5月6日