関数型言語の勉強にSICPを読もう - (11) 2章 - データによる抽象の構築(62-63ページ)
問題 2.24
(list 1 (list 2 (list 3 4))) gosh> (1 (2 (3 4)))
問題なし。
問題 2.25
(car (cdr (car (cdr (cdr (list 1 3 (list 5 7) 9)))))) (car (car (list (list 7)))) (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (list 1 (list 2 (list 3 (list 4 (list 5 (list 6 7))))))))))))))))))
しかし練習問題の難易度にものすごいばらつきを感じる。
そしてこの解答はどうなのよ。
問題 2.26
(append x y) gosh> (1 2 3 4 5 6) (cons x y) gosh> ((1 2 3) 4 5 6) (list x y) gosh> ((1 2 3) (4 5 6))
(list x y)を間違えた。答えを見て納得。
問題 2.27
まずは reverse 再実装。以前は苦戦したけど早く書けるようになった。
でもきれいかどうかと言われると微妙。
識者の意見が欲しいところ。
(define (reverse l) (if (null? l) '() (append (reverse (cdr l)) (list (car l)))))
これを手がかりに deep-reverse を実装。pair? を使うのがポイント。
(define (deep-reverse l) (if (null? l) '() (append (deep-reverse (cdr l)) (if (pair? (car l)) (list (deep-reverse (car l))) (list (car l)))))) (deep-reverse (list 1 2 3 4)) (deep-reverse (list (list 1 2 3) (list 5 6)))
解答例によると reverse を使うと。ガーン!。
しかもそこで map か!こんなの思いつかないよ(涙)
(define (deep-reverse tree) (if (not (pair? tree)) tree (reverse (map deep-reverse tree))))
計算機プログラムの構造と解釈
posted with amazlet on 06.04.15
Gerald Jay Sussman Julie Sussman Harold Abelson 和田 英一
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404
ピアソンエデュケーション (2000/02)
売り上げランキング: 56,404