【问题标题】:Error in beginning exercise in SICP (Exercise 1.3)在 SICP 中开始练习时出错(练习 1.3)
【发布时间】:2012-03-10 17:10:45
【问题描述】:

提示是定义一个过程,返回三个数字中最大的两个的平方和。

我知道这不是一个优雅的解决方案,但这是我一起破解的:

(define (largest-of-two-sum-of-squares x y z)
        (cond ((and (< x y) (< x z)) (sum-of-squares y z))
              ((and (< y z) (< y x)) (sum-of-squares x z))
              ((and (< z x) (< z y)) (sum-of-squares x y)))))

我想知道为什么会出错。

;The object 85 is not applicable

单词对象后面的数字总是正确的答案,顺便说一句。我是一个方案初学者,它一定是我的语法吗?

谢谢

【问题讨论】:

  • 你有一个多余的右括号。
  • 输入 6 6 6 会发生什么? :-)

标签: lisp scheme sicp


【解决方案1】:

这是另一种可能的解决方案,即使在所有三个数字都相等或两个相等且小于另一个的情况下,这个解决方案也有效:

(define (sum-max a b c)
  (define (sum x y)
    (+ (* x x) (* y y)))
  (if (>= a b)
      (if (>= b c)
          (sum a b)
          (sum a c))
      (if (>= a c)
          (sum b a)
          (sum b c))))

【讨论】:

  • 为什么投反对票?我的解决方案是正确的,而且他 OP 已经在他的代码中发现了问题,我只是在指出另一种选择。
【解决方案2】:

正如 sindikat 指出的那样,一个多余的右括号。对于那个很抱歉。

【讨论】:

  • @ÓscarLópez: 或者如果两个相等且低于另一个
【解决方案3】:

怎么样

(define (largest-of-two-sum-of-squares x y z)
    (+ (square x) (square y) (square z)
       (- (square (min x y z)))))

?

【讨论】:

  • 上述解决方案当然是正确的,但鉴于 SICP 书中对练习 1.3 的说明,读者不应该“知道”min 过程。只允许条件表达式
猜你喜欢
  • 1970-01-01
  • 2012-07-05
  • 2011-11-05
  • 2017-02-03
  • 2010-12-26
  • 2012-12-15
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多