SICP 読み (20)
微妙なまま進行しています。今日は問題 2.24 以降がどこまでできるか。
問題 2.24
机上で考えてみた。最初、
(list 1 (list 2 (list 3 4))) ;; => (1 (2 (3 4)))
が
(1 2 3 4)
と同じか、と勘違いしてしまっていて、びっくり。cons なナニと間違えていた。ちなみに、
(cons 1 (cons 2 (cons 3 (cons 4 '())))) ;; => (1 2 3 4)
なんだったよ。(ため息
たしかこんな感じ (動作確認してない
gosh> (define l (list 1 (list 2 (list 3 4)))) l gosh> l (1 (2 (3 4))) gosh> (car l) 1 gosh> (cdr l) ((2 (3 4))) gosh> (car (cdr l)) (2 (3 4)) gosh> (car (car (cdr l))) 2 gosh> (cdr (car (cdr l))) ((3 4)) gosh> (car (cdr (car (cdr l)))) (3 4) gosh>
ちょっと(??)まだまだ慣れてない。マンガは略します。
問題 2.25
これも先にこっちに書いてみる。
7 を取りだす car 又は cdr とゆー事で。
gosh> (cdr (car (cdr (cdr '(1 3 (5 7) 9))))) 7 gosh> (car (car '((7)))) 7 gosh> (define l '(1 (2 (3 (4 (5 (6 7))))))) gosh> (cdr (cdr (car (cdr (car (cdr (car (cdr (car (cdr l)))))))))) 7 gosh>
どうか。やってみたのが以下。
gosh> (cdr (car (cdr (cdr '(1 3 (5 7) 9))))) (7) gosh>
違った。こうか。
gosh> (car (cdr (car (cdr (cdr '(1 3 (5 7) 9)))))) 7 gosh>
次。
gosh> (car (car '((7)))) 7 gosh>
これは OK。次。
gosh> (define l '(1 (2 (3 (4 (5 (6 7))))))) l gosh> (cdr (cdr (car (cdr (car (cdr (car (cdr (car (cdr l)))))))))) () gosh>
ぎゃー。多すぎてワケワカ。以下、試行錯誤。(とほほ
gosh> (cdr (car (cdr (car (cdr (car (cdr (car (cdr l))))))))) ((6 7)) gosh> (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr l)))))))))) (6 7) gosh> (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr l))))))))))) (7) gosh> (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr l)))))))))))) 7 gosh>
このあたり、きちんと理解しておかないと後で泣きを見そうです。
しかも傾向として末端のナニを cdr 一発で取り出せるという誤解があるな。(駄目
問題 2.26
これも机上検討を晒して別途検証。
gosh> (define x (list 1 2 3)) x gosh> (define y (list 4 5 6)) y gosh> (append x y) (1 2 3 4 5 6) gosh> (cons x y) ((1 2 3) . (4 5 6)) gosh> (list x y) ((1 2 3) 4 5 6) gosh>
どうなるか。(怖
gosh> (define x (list 1 2 3)) x gosh> (define y (list 4 5 6)) y gosh> (append x y) (1 2 3 4 5 6) gosh> (cons x y) ((1 2 3) 4 5 6) gosh> (list x y) ((1 2 3) (4 5 6)) gosh>
駄目ぢゃん。(とほほほ
リストな考え方はもうすこし机上で修行が必要な模様。精進させて頂きます。ってか、他の問題も未着手のナニ以外は答え合わせをしといた方が良いな。