gpt4 book ai didi

Lisp 表达式评估为列表,不理解它是如何工作的

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

我的老师很不善于解释。他只是给了我们一个问题和一个他无法解释的答案,导致我对它的了解不多。

是否有人可以分解这个答案是如何产生的?我知道 car 返回列表的第一个元素,cdr 返回第一个元素之后的所有元素。

提前感谢阅读。

Suppose the Lisp variable E has been given a value as follows:

(setf e '((-1 -2)
((90 91) 92 93 94 95 96 97 98)
(9 19 29 39 49 59 69 79 89)))

Write a LISP expression which doesn't involve any numbers, but which evaluates to the list:

(-2 91 (19 29 39 49 59 69 79 89))

Answer:

(list (cadar e) (cadr (caadr e)) (cdaddr e))

最佳答案

在 Common Lisp(以及其他 Lisp 语言)中,cadarcdaddr 等函数(您最多可以有 4 个字符 da 在第一个 c 之后和最后一个 r 之前)是函数组合的缩写 carcdr,每个a对应一个car,每个d对应一个cdr.

也就是说,(caar x)等价于(car(car x))(caddr x)等价于(car (cdr (cdr x))) 等等。

例如,在您的示例中,(cadar e) 表示 (car (cdr (car e))),即:

take the (car e), which is (-1 -2)
take the cdr of the previous value, which is the list (-2)
take the car of this list, that is the integer -2

这里是其他等价物:

(cadr (caadr e)) = (car (cdr (car (car (cdr e)))))
(cdaddr e) = (cdr (car (cdr (cdr e))))

所以 (list (cadar e) (cadr (caadr e)) (cdaddr e)) 等同于:

(list (car (cdr (car e)))
(car (cdr (car (car (cdr e)))))
(cdr (car (cdr (cdr e)))))

产生预期结果(您可以通过按正确顺序应用所有函数来验证这一点)。

关于Lisp 表达式评估为列表,不理解它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052629/

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