避免方案

时间:2017-05-04 21:31:55

标签: scheme division

我想制作一个除以两个给定数字的函数,然后将它们的商和余数放在一个列表中。除了某些情况,我已经让它工作了。这是我的代码:

(define (div dividend divisor)
  (cond ((= 0 divisor) #f)
    ((< dividend divisor) (cons (quotient divisor dividend) (cons  dividend '())))

(else
  (div (- dividend divisor) divisor))))

这适用于大多数情况。

(div 13 4)   returns   '(4 1)
(div 3 7)   returns   '(2 3)
(div 5 0)   returns   #f  ;(returns false to avoid divide by zero situations)

所有这些都完美无缺,但其中包括:

(div 16 4)
(div 4 2)
(div 15 5) 

全部返回以下错误:商:未定义为0 这专注于代码:

((&lt; dividend divisor)(cons (除数除数)(cons dividend&#39;())))

有没有其他方法可以构建我需要的列表?我需要列表来包含被除数进入除数的次数和余数。

1 个答案:

答案 0 :(得分:0)

您正确地将除数检查为0,然后在(quotient divisor dividend)中将其反转。 13/4的商为3,余数为1,因为13 = 3 * 4 + 1。