SICPを読む(34) 問題2.1 ちとはまった。
問題 2.1
そういえば「再代入の方法を知らない」という事実に気がついた。
正負を逆にするだけで大変だ・・・。
う〜ん、う〜ん。
新しい変数を用意して代入する手もあるけど、なんかBASIC!って感じなので、パス。
考えた末に、
(define (make-rat n d) (define (rat-normal x) (if (negative? (denom x)) (cons (* -1 (numer x)) (* -1 (denom x))) x)) (define (rat-gcd x) (let ((g (gcd (numer x) (denom x)))) (cons (/ (numer x) g) (/ (denom x) g)))) (rat-normal (rat-gcd (cons n d))))
3回consしてみた。イマイチかな・・・。
追記
2.1.2を見ると、この考え方も全然アリだと思い始めた。変更が凄く容易だし、新しい機能を追加するのも柔軟に対処出来る。
再代入やletの使用を避けたことで新しいものが見えた気がする。