gpt4 book ai didi

list - 如何在 lisp 中按升序排列 3 个数字的排序列表

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:40 30 4
gpt4 key购买 nike

我正在尝试在 lisp 中按升序排列 3 个数字的排序列表。但是在编译和加载时出现错误,如“Incorrect number of arguments to if”。

(defun order (n1 n2 n3)
(if (>= n1 n2)
(progn(progn(if (>= n1 n3)
(progn(if (>= n2 n3) (progn(setf max n1) (setf mid n2) (setf min n3)) (progn(setf max n1) (setf mid n3) (setf min n2))))
(progn(setf max n3) (setf mid n1) (setf min n2))
)))
(progn(progn(if (< n1 n3)
(progn(if (>= n2 n3) (progn(setf max n2) (setf mid n3) (setf min n1)) (progn(setf max n3) (setf mid n2) (setf min n1))))
((setf max n2) (setf mid n1) (setf min n3))
)))

))
(list min mid max)
)

最佳答案

这是一个可能的解决方案:

(defun order (min mid max)
(when (< mid min)
(rotatef mid min))
(if (< max min)
(rotatef max mid min)
(when (< max mid)
(rotatef mid max)))
(list min mid max))

首先,我们假设三个参数的顺序已经正确,如果不是这样,我们通过使用 rotatef 来更改它们。 ,交换两个变量或旋转三个或更多变量的原始函数。

如果有必要,第一个 when 更正 minmid 之间的相对顺序,如果 mid 交换它们> 小于 min

当我们知道 min 实际上小于 mid 时,我们尝试以这种方式将 max 放在正确的位置:

  • 首先,如果它小于min,这意味着它是三个中较小的,我们适本地旋转三个变量,

  • 否则,它可能介于 minmid 之间,在这种情况下我们交换 midmax 变量。如果它大于或等于 mid,则无需进行交换,并且三个变量已包含正确顺序的值。

关于list - 如何在 lisp 中按升序排列 3 个数字的排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39685970/

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