少しは成長したかな - The Little Schemer
全章読了
前回に続いて、8~10章を読み終えた。
感想は「楽しかった」。
技術書を読んで、「ためになった」とか、「勉強になった」などの感想はあっても、
「楽しかった」と表現できる本はなかなかない。
そんな中で、この本は杞憂の存在に感じる。
それは、筆者のScheme好きが本ににじみ出ているからだと思う。
例えば、
(define insert-g
(lambda (seq)
(lambda (new old l)
(cond ((null? l) (quote ()))
((eq? (car l) old) (seq new old (cdr l)))
(else (cons (car l)
((insert-g seq) new old (cdr l))))))))
(define seqrem
(lambda (new old l)
l))
(define yyy
(lambda ( a l)
((insert-g seqrem) #f a l)))
という定義に対して、
と、例題と共に問いかける。
そしてこの本は、
何が、"our old friend"かというと、
3章で取り上げた、'rember'と同じ振る舞いをすることからきている。
;;与えられた 'keyword'をリスト(member)から消す(remove)定義
;;(remove member -> rember)
;; 書き換え版
(define rember
(lambda (a lat)
(cond ((null? lat) (quote ()))
((eq? (car lat) a) (rember a (cdr lat)))
(else (cons (car lat) (rember a (cdr lat)))))))
(rember 'mint '(lamb chops and mint jelly))
;;==> (lamb chops and jelly)
(rember 'cup '(coffee cup tea cup and hick cup))
;;==> (coffee tea and hick)
つまり、以前、取り上げたものを別の表現で定義しただけ。
こういった類の例は、「第○○章の××を、改めて書き換えると、△△のようになる。」
と、定石のように書かれるが、この本にかかれば、"our old friend"になってしまう。
わざとらしさを通り越して、筆者の世界に引き込まれてしまう。
そして、終始英語ではあるが、そんなに難しい表現で書いてある訳ではない。
高校生までの英語で十分だと思う。
メインマシンがMacなので、分からない単語は「辞書.app」を使って、
難なく読み終えた。
以前は、日本語訳が再版されないかと期待した時期もあったが、
もはや、原文で十分だと感じる。
むしろ、Schemeと英語の両方を学べることを「一石二鳥」と捉えれば、
読む価値はさらに上がる。
そんな一冊だった。
The Little Schemer 4e (1995/12/21) DP Friedman 商品詳細を見る |
前回に続いて、8~10章を読み終えた。
感想は「楽しかった」。
技術書を読んで、「ためになった」とか、「勉強になった」などの感想はあっても、
「楽しかった」と表現できる本はなかなかない。
そんな中で、この本は杞憂の存在に感じる。
それは、筆者のScheme好きが本ににじみ出ているからだと思う。
例えば、
(define insert-g
(lambda (seq)
(lambda (new old l)
(cond ((null? l) (quote ()))
((eq? (car l) old) (seq new old (cdr l)))
(else (cons (car l)
((insert-g seq) new old (cdr l))))))))
(define seqrem
(lambda (new old l)
l))
(define yyy
(lambda ( a l)
((insert-g seqrem) #f a l)))
という定義に対して、
(yyy 'sausage '(pizza with sausage and bacon))
;;==> (pizza with and bacon)
What do you think yyy.
と、例題と共に問いかける。
そしてこの本は、
Suprise! It is our old friend rember.
何が、"our old friend"かというと、
3章で取り上げた、'rember'と同じ振る舞いをすることからきている。
;;与えられた 'keyword'をリスト(member)から消す(remove)定義
;;(remove member -> rember)
;; 書き換え版
(define rember
(lambda (a lat)
(cond ((null? lat) (quote ()))
((eq? (car lat) a) (rember a (cdr lat)))
(else (cons (car lat) (rember a (cdr lat)))))))
(rember 'mint '(lamb chops and mint jelly))
;;==> (lamb chops and jelly)
(rember 'cup '(coffee cup tea cup and hick cup))
;;==> (coffee tea and hick)
つまり、以前、取り上げたものを別の表現で定義しただけ。
こういった類の例は、「第○○章の××を、改めて書き換えると、△△のようになる。」
と、定石のように書かれるが、この本にかかれば、"our old friend"になってしまう。
わざとらしさを通り越して、筆者の世界に引き込まれてしまう。
そして、終始英語ではあるが、そんなに難しい表現で書いてある訳ではない。
高校生までの英語で十分だと思う。
メインマシンがMacなので、分からない単語は「辞書.app」を使って、
難なく読み終えた。
以前は、日本語訳が再版されないかと期待した時期もあったが、
もはや、原文で十分だと感じる。
むしろ、Schemeと英語の両方を学べることを「一石二鳥」と捉えれば、
読む価値はさらに上がる。
そんな一冊だった。