継続
能無しな僕ですが、かの有名なSICPを読んでみたいと思い、Schemeを勉強してます。
んで、その準備にと"The Little Schemer"を読んでます。これも名著。
終わったら"The Seasoned Schemer"に進むつもり。
8章のmultirember&co関数あたりで難易度が上がってるような気がする...。
(define multirember&co (lambda (a lat col) (cond ((null? lat) (col (quote ()) (quote ()))) ((eq? (car lat) a) (multirember&co a (cdr lat) (lambda (newlat seen) (col newlat (cons (car lat) seen))))) (else (multirember&co a (cdr lat) (lambda (newlat seen) (col (cons (car lat) newlat) seen)))))))
ってな定義なんですが、
(define a-friend (lambda (x y) (null? y)))
なる関数をcolとして用いて、つまり
(multirember&co 'tuna '(strawberries tuna and swordfish) a-friend)
を評価すると、結果はtrueだと。
まず、戻り値がtrueかfalse(aが見つかったか否か)なのに、何故に"multirember&co"なる関数名なのか疑問。
multirember&co関数って、colとして与える関数によっていろんな意味になりえるよなー。たぶん。
名前なんて何でも良かったのかな。
一行ずつトレースしていけばなんとか動きは分かるけど、書けって言われても絶対無理っす。
慣れるしかないのかなぁ。
「multirember&co」を検索ワードにしてググってみたら、multirember&coみたいなのを「継続渡しスタイル」というらしい。
継続を理解するのは難しい、といたるところで耳にしていたので、とうとう来たかー、って感じ。
あぁ、SICPは遠い...。