問題 2.1
解の例を発見。以下。
(define (make-rat n d) (let ((g ((if (< d 0) - +) (gcd n d)))) (cons (/ n g) (/ d g))))
げ、こんな簡単に書けるの? と言いつつ盛り込んでみて試験してみたら以下。
make -k Testing rational ... failed. discrepancies found. Errors are: test 3/-3: expects (-1 . 1) => got (1 . -1) test -3/-3: expects (-1 . 1) => got (-1 . -1) test (+ 1/-2 1/3): expects (-1 . 6) => got (1 . -6) test (+ 1/2 -1/3): expects (1 . 6) => got (-1 . -6) test (- -1/2 1/3): expects (-5 . 6) => got (5 . -6) test (- 1/2 -1/3): expects (5 . 6) => got (-5 . -6) test (* 1/-2 1/3): expects (-1 . 6) => got (1 . -6) test (* 1/2 1/-3): expects (-1 . 6) => got (1 . -6) test (/ 1/-2 1/3): expects (-3 . 2) => got (3 . -2) test (/ 1/2 -1/3): expects (-3 . 2) => got (3 . -2) Compilation finished at Thu Jan 7 22:50:31
これはダウトなわしの実装に近いような気がする。で、試験してみようかな、って思ったらわしの解は gcd も略してて話にもならん。orz
とりあえず UT 万歳、ってコトで (何