定义一个以三个数字为参数并返回两个较大数字的平方和的过程

时间:2019-01-13 02:19:14

标签: sorting scheme comparison

我在弄清楚如何对两个最大数进行排序并将其返回到平方和过程中遇到麻烦。我正在努力用Scheme的语法写出代码。我正在尝试尽可能整洁地编写它,并且我一直在脑海里和纸上划着圆圈,试图这样做。这本书描述了“循序渐进”的思维方式,我认为我在这方面遇到了麻烦。

这本书提供平方和和平方过程的代码。我会包含我的伪代码,但是我很迷路。这是本书提供的代码:

(define (square x) (* x x))

(define (sum-of-squares x y)
  (+ (square x) (square y)))

如何定义一个以三个数字为参数并返回两个较大数字的平方和的过程?

3 个答案:

答案 0 :(得分:1)

  

如何定义一个以三个数字为参数并返回两个较大数字的平方和的过程?

首先,您需要为过程指定名称。我们称之为sum-of-squares-two-largest

(define (sum-of-squares-two-largest x y z)
   ...)

它可以利用sum-of-squares函数,但是它需要首先从x,y,z中找到两个最大的数字。

做到这一点的一种方法是摆脱最小的数字。您可以定义一个辅助程序smallest? a b c,方法是进行(and (<= a b) (<= a c)),以检查a是3个数字中的最小者。

(define (sum-of-squares-two-largest x y z)
   (if (smallest? x y z)
       (sum-of-squares y z)
       (if (smallest? y x z)
           ...]

答案 1 :(得分:0)

min-of-three写代码。它的(如摄影中一样)是您需要的:

(define (negative-min-of-three a b c)
   (if (<= a b)
       (if (<= a c)
           (..... b ... c .....)
           (..... a ... b .....))
       (if (<= 
   ..........

您可以完成代码并重命名。时钟在滴答滴答!

答案 2 :(得分:0)

我创建了两种方法来获得最大的值,暂时将其中一种方法放在中间。

(define (largest x y z)
  (cond ((and (> x y) (> x z)) x)
        ((and (> y x) (> y z)) y)
        (else z))
)

(define (mid x y z)
  (cond ((and (> x y) (< x z)) x)
        ((and (> y x) (< y z)) y)
        (else z))
)

(define (square a)
  (* a a)
)

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

(sum-of-two-largest -12 -4 1)
相关问题