- 次の比較結果がどうなるか調べよ.
<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) ->
- 以下の返る値を求めよ.
<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)
- 以下の式を実行した場合の値を記せ.
- (append '(a b) '(c d))
- (list '(a b) '(c d))
- (cons '(a b) '(c d))
- (length (cons '(a b) '(c d)))
- (length '(cons '(a b) '(c d)))
- (reverse '(list '(a b) '(c d)))
- (reverse (list '(a b) '(c d)))
- (atom nil)
- (listp nil)
- (consp nil)
- 2個のリストデータを連結する関数append2を,cond, null, car, cdr ,
cons を使って定義せよ.
- 任意個のリストデータを連結する関数append*を定義せよ.
- 次のような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))))))
- (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)))
- (cond (a b)), (cond (a b) (c d)), (cond (a) (c d)) のマクロ展開
を行なってみよ.
- (unless 条件 . 本体) という形で,条件が成り立たないならば,本体
を実行するというマクロを定義せよ.
- 以下のように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))))))
- whenをifを用いてマクロ定義せよ.
- quoteをマクロで定義せよ.
- 他の方法でreverseを定義せよ.
- :test, :keyの引数をとることができるmemberの定義を示せ.
- leditを使ってリスト構造を変更してみよ.
- set-difference, set-exclusive-or,subsetpを定義せよ
- adjoin,remove-duplicatesを定義せよ
- findを定義せよ
- eq-classesの定義にまちがいがないかチェックせよ.
- eq-classesの定義をtest,keyを与えて利用するように一般化せよ.
- equivalent-setsの定義にまちがいがないかチェックせよ.
- equivalent-setsをeq-classesを用いて定義できないか.
- equivalent-setsをmemberを用いて簡潔に定義できないか考えよ.
- equivalent-setsを用いてequivalent-graphsを定義せよ.