gpt4 book ai didi

方案:从一组三个数字中返回两个最大的数字

转载 作者:行者123 更新时间:2023-12-05 08:14:02 29 4
gpt4 key购买 nike

我应该编写一个函数来打印一组给定的三个数字中两个较大数字的平方和。

我对这种情况的处理相当笨拙。我没有编写返回一组 3 中最大的两个数字的函数,而是编写了函数,以便表达式减少到两个所需的数字。 # SSL 函数。

我必须这样做的原因是,我无法编写可以同时返回多个值的 LISP 函数,也无法编写可以读取两个值作为参数的 LISP 函数。

有没有一种方法可以抽象出其他程序中的最大数计算?

(define
(min a b)
(if (> a b) b a)
)

(define
(max a b)
(if (< a b) b a)
)


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



(define
(ssl a b c)
(+ (square (max a b)) (square (max (min a b) c)))
)

最佳答案

这是 SICP 中的练习 1.3 ♥(计算机程序的结构和解释)书。

此时书单中还没有介绍,也没有必要使用。这是我的解决方案(我目前正在学习 SICP 书)。

首先要找出三个数中最大的数:

(define (getlargest a b c) 
(if (> (if (> a b) a b) c) (if (> a b) a b) c)
)

获得最大的读数:

  • 如果a大于b,则a,否则b
  • 获取上一步的结果并以相同的方式将其与 c 进行比较。
  • 返回a 和 b 之间的最大数,或者返回 c,如果 c 恰好是比 a 和 b 都大。

第二件事是想出中间的数字:

(define (getmiddle a b c)
(cond ((= (getlargest a b c) a) (if (> b c) b c))
((= (getlargest a b c) b) (if (> a c) a c))
((= (getlargest a b c) c) (if (> a b) a b))
)
)

getmiddle 阅读:

  • 使用 getlargest 确定 a 或 b 或 c 是否是最大数。
  • 如果a是最大的数,比较b和c,返回b和c中的最大值;同样,
  • 如果b最大,比较a和c,返回a和c中最大的
  • 如果c最大,比较a和b,返回a和b中最大的

现在我们需要一个函数来计算两个数的平方和:

(define (sqrsum x y)
(+ (* x x) (* y y))
)

最后是主要功能:

(define (main a b c) 
(sqrsum (getlargest a b c) (getmiddle a b c))
)

我们可以通过将所有内容放入 main 来“黑盒化”整个事情:

(define (main a b c) 
(define (getlargest)
(if (> (if (> a b) a b) c) (if (> a b) a b) c)
)

(define (getmiddle)
(cond ((= (getlargest) a) (if (> b c) b c))
((= (getlargest) b) (if (> a c) a c))
((= (getlargest) c) (if (> a b) a b))
)
)

(define (sqrsum x y)
(+ (* x x) (* y y))
)

(sqrsum (getlargest) (getmiddle))
)

关于方案:从一组三个数字中返回两个最大的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25859601/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com