絶版になった旧版の方、高けぇ(笑)表紙はどんなのだったんだろう。
追記
原書はこちら。
『Scheme手習い』(The Little Schemer, 4th edition)、印刷所に入稿。10月23日発売予定。 http://bit.ly/bokZZk
MIT の教科書 "計算機プログラムの構造と解釈" (昔は構造と実行) を読む為の本だったそうである。まじか!
Thunk you, Peter J. Landin.
The Little Schemer, 4th Edition とその続き The Seasoned Schemer は、よく Lisp や Scheme の入門書として紹介されます。
初めての人のためのLISP[増補改訂版] の次あたりに読んでみてはどうでしょうか。
これ↑も読んでみたいのですが、無職でお金がないので購入するか迷ってます。
こういうのって、「読みたい」以前に「全部手元に欲しい・・・」っていう収集欲的なものが働きませんか。
Schemer シリーズと言いつつ、Java と ML を含んでいますが。
The Little Schemer, 4th Edition
car, cdr, cons, cond, eq?, null?, 再帰、高階関数、クロージャ、継続渡し、Y combinator, カリー化、Scheme で作る小さなLisp など。
letrec, let/cc, call/cc, 継続(渡し、呼び出し)、set!, if, scheme で作る Lisp など。
sxml の作者の方が scheme で作った miniKANREN という Prolog ライクな論理型言語について話が進むらしい。マクロも。
A Little Java, A Few Patterns (Language, Speech, & Communication)
Java のと ML のは持ってないので よく知りませんが、読んでみたいです。
ML といえば Caml , Ocaml, F# ですよね。
The Little Schemer, 4th Edition の9章が、The Seasoned Schemer は13章がサンプルとして公開されているようです。
PostScript ファイルなので viewer がない方はこちら。
Google Books では The Reasoned Schemer は読めないみたいですね。
The Little Schemer, 4th Edition と A Little Java, A Few Patterns (Language, Speech, & Communication) は訳本があるようですね。絶版みたいですけど。
Scheme(スキーム)手習い―直感で学ぶLisp (COMPUTATION & SOFTWARE SCIENCE)
探せば他にもありそうですね。
The Little Schemer, 4th Edition は元々Little LISPer だったようです。
The Little LISPer: Trade Edition
(define member?
(lambda (a lat)
(cond ((null? lat) #f)
((eq? a (car lat)) #t)
(else (member? a (cdr lat))))))
The Little Schemer のmember? その2
(define member?
(lambda (a lat)
(cond ((null? lat) #f)
(else (or (eq? a (car lat))
(member? a (cdr lat)))))))
もっとすっきり書くには?
(define member?
(lambda (a lat)
(eq? a (find (lambda (e)
(eq? a e)) lat))))
こんな感じか?
(define member?
(lambda (a lat)
(any (lambda (e)
(eq? a e)) lat)))
(define rember (lambda (a lat) (cond ((null? lat) lat) ((eq? a (car lat))(cdr lat)) (else (cons (car lat)(rember a (cdr lat))))))) |
(define multirember (lambda (a lat) (cond ((null? lat) lat) ((eq? a (car lat)) (multirember a (cdr lat))) (else (cons (car lat)(multirember a (cdr lat))))))) |
(define rember* (lambda (a l)
(cond ((null? l) l)
((atom? (car l)) (cond ((eq? a (car l))(rember* a (cdr l)))
(else (cons (car l)(rember* a (cdr l))))))
(else (cons (rember* a (car l))
(rember* a (cdr l))))))) |
(define rember-f (lambda (test? a l)
(cond ((null? l) l)
((test? a (car l)) (rember-f test? a (cdr l)))
(else (cons (car l)
(rember-f test? a (cdr l))))))) |
(define rember-f (lambda (test?) (lambda (a l) (cond ((null? l) l) ((test? a (car l))((rember-f test?) a (cdr l))) (else (cons (car l) ((rember-f test?) a (cdr l)))))))) |
(define multirember-f (lambda (test?) (lambda (a lat) (cond ((null? lat) lat) ((test? a (car lat))((multirember-f test?) a (cdr lat))) (else (cons (car lat) ((multirember-f test?) a (cdr lat)))))))) |
(define insert-g (lambda (seq)
(lambda (new old l)
(cond ((null? l) l)
((eq? old (car l))(seq new old (cdr l)))
(else (cons (car l)
((insert-g seq) new old (cdr l)))))))) |
(define insert-g (lambda (set-f) (lambda (new old lat) (fold-right (lambda (e l) (cond ((eq? old e)(set-f new old l)) (else (cons e l)))) '() lat)))) |