理系学生日記

おまえはいつまで学生気分なのか

問題 3-58 (3.5.2 Infinite Streams)

関数 expand の解釈が問われています!!

(define (expand num den radix)
  (cons-stream
   (quotient (* num radix) den)
   (expand (remainder (* num radix) den) den radix)))

最初からぶっちゃけると,これ割り算してるんですよね.筆算を思い浮かべるといいとおもう.radix はそのまま基数ってことで.
だから,

(define S (expand 1 7 10))
(dump-stream S 10) ; 1, 4, 2, 8, 5, 7, 1, 4, 2, 8, done

上の出力は 1/7 をしたときの商 (循環小数になる) ですし,下の出力は 3/8 をしたときの小数部ですね (これは割り切れてる).

(define S (expand 3 8 10))
(dump-stream S 10) ; 3, 7, 5, 0, 0, 0, 0, 0, 0, 0, done