gpt4 book ai didi

lisp - Common Lisp - 符号计算的简单介绍 : Excercise 4. 4

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:07 25 4
gpt4 key购买 nike

我正在使用 clisp 学习 Common Lisp 并输入了以下代码:

(defun ordered (x y)
(if (< x y)
(list x y)
(list y x)))

(setq l (ordered 28 49))
(print l)
(setq l (ordered 49 28))
(print l)

期待这些答案:(28 49)(49 28)

得到这些答案:(28 49)(28 49)

在本书的解决方案中,我找到了相同的函数定义。有什么问题吗?

最佳答案

你的代码

(defun

定义一个函数,

        ordered 

命名为“有序”,

                (x y)

它需要两个参数,在它的主体中被称为“x”和“y”,然后在接收到参数时(即用两个值调用,例如(有序49 28))

   (if (< x y)

它会比较它们,如果第一个比第二个小,它会产生

       (list x y)

将相同的两个值重新打包在一个列表中(即'(49 28)); 否则,如果第一个值小于第二个值,

       (list y x)))

它将生成包含第二个值的列表第一个,然后是第一个参数值(即'(28 49))。

那么,比较 4928 是什么情况?


一般阅读这段代码,我们可以说如果它接收较小数作为它的第一个参数,它会首先产生较小的数,然后产生较大的数,在结果列表中;

如果它接收到较小的数字作为其第二个参数,它将在结果列表中首先产生较小的数字,然后产生较大的数字。

回过头来看,我们可以看到这个描述可以进一步简化为一个简单的陈述:它总是会首先产生 ______ 个数字,然后在结果列表中产生 ______ 个数字。


另一种解决方法是写下由该定义创建的函数,

( lambda (x y)  (if   (< x y)    (list x y)    (list y x) ) )

然后象征性地遵循它的应用:

(   ( lambda (x y)  (if   (< x y)    (list x y)    (list y x) ) )
49
28 )

==

(let ( (x 49)
(y 28)
)
(if (< x y) (list x y) (list y x) ) )

==

(let ( (x 49)
(y 28)
)
(if (< 49 28) (list x y) (list y x) ) )

==

(let ( (x 49)
(y 28)
)
(if FALSE (list x y) (list y x) ) )

==

(let ( (x 49)
(y 28)
)
(list y x) )

==

(let ( (x 49)
(y 28)
)
(list 28 49) )

==

(list 28 49)

关于lisp - Common Lisp - 符号计算的简单介绍 : Excercise 4. 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37503952/

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