13 08 2011 Scheme javascript Tweet
JGPによるとjavascriptはCの皮を被ったLispだからLISPの作法にも慣れておくと良いと思うのです。というよりこのシリーズは面白いので読むといいと思います。
two-in-a-rowっていうリストの中に同じ値が隣あっているかどうかを調べる関数を定義する。
まずは相互再帰
(define two-in-a-row? (lambda (lat) (cond ((null? lat) #f) (else (is-first-b? (car lat) (cdr lat)))))) (define is-first-b? (lambda (a lat) (cond ((null? lat) #f) (else (or (eq? (car lat) a) (two-in-a-row? lat))))))
これを直接再帰に書き直す。
(define two-in-a-row-b? (lambda (preceeding lat) (cond ((null? lat) #f) (else (or (eq? (car lat) preceeding) (two-in-a-row-b? (car lat) (cdr lat))))))) (define two-in-a-row-2? (lambda (lat) (cond ((null? lat) #f) (else (two-in-a-row-b? (car lat) (cdr lat))))))
8/20にJGPの読書会@静岡があります。