【问题标题】:Avoiding a divide-by-zero situation in scheme在方案中避免被零除的情况
【发布时间】:2017-05-04 21:31:55
【问题描述】:

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

(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) 

全部返回以下错误:quotient: undefined for 0 这主要集中在代码上:

(((商除数)(cons被除数'())))

还有其他方法可以构建我需要的列表吗?我需要该列表包含被除数进入除数的次数以及余数。

【问题讨论】:

    标签: scheme division


    【解决方案1】:

    您正确地检查了除数是否为 0,但随后您在 (quotient divisor dividend) 中反转它。 13/4 的商为 3,余数为 1,因为 13 = 3*4 + 1。

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多