括弧の難易度は高い
Schemeでプログラムを書いてみました。ただのテキストエディタで書くのは無理ですね。少なくとも自動インデントと括弧の対応表示は必須です。
SICPの問題を解いているのですけど、反復的アルゴリズムはループで書く方が慣れているので分かりやすいです。というか、Schemeで書くと違和感があります。
例えば問題1.17の再帰的なのは普通という印象。
(define (double n) (* n 2)) (define (halve n) (/ n 2)) (define (times a b) (cond ((= b 0) 0) ((even? b) (times (double a) (halve b))) (else (+ a (times a (- b 1))))))
それに引き替え問題1.18の反復的なのはループで書けばいいのにと思ってしまいます。
(define (double n) (* n 2)) (define (halve n) (/ n 2)) (define (times a b) (define (times-iter t a b) (cond ((= b 0) t) ((even? b) (times-iter t (double a) (halve b))) (else (times-iter (+ t a) a (- b 1))))) (times-iter 0 a b))
ちなみにPerlでループを使って書くとこんな感じ。
sub double { $_[0] * 2; } sub halve { $_[0] / 2; } sub multi { my $a = shift; my $b = shift; my $sum = 0; while ($b > 0) { if ($b % 2 == 0) { $a = double($a); $b = halve($b); } else { $sum += $a; $b--; } } return $sum; }