练习 3.58

从定义来看, expand 每次生成 (* num radix) 除以 den 的商,然后将 (* num radix) 除以 den 的余数作为 num 参数,递归地调用 expand

;;; 58-expand.scm

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

测试:

1 ]=> (load "58-expand.scm")

;Loading "58-expand.scm"... done
;Value: expand

1 ]=> (stream-head (expand 1 7 10) 20)

;Value 13: (1 4 2 8 5 7 1 4 2 8 5 7 1 4 2 8 5 7 1 4)

1 ]=> (stream-head (expand 3 8 10) 20)

;Value 14: (3 7 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)

quotient 返回两个除数之商,而 remainder 返沪两个除数之余:

1 ]=> (quotient 10 3)

;Value: 3

1 ]=> (remainder 10 3)

;Value: 1

讨论

blog comments powered by Disqus