gpt4 book ai didi

lisp - 获取列表中 elt 的 cdr

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

我使用 2 种方法来构建基于 cons 单元格的树。

(defun make-tree (nodes)
(cons nodes NIL))

(defun add-child (tree child)
(setf (cdr tree) (append (cdr tree) child)))

然后我创建了 4 个参数:

(defparameter *root* (make-tree "root"))
(defparameter *a* (make-tree "a"))
(defparameter *b* (make-tree "b"))
(defparameter *c* (make-tree "c"))

然后我构建了以下树:

(add-child *root* *a*)
(add-child *root* *b*)
(add-child *a* *c*)

*root* 显示在控制台中:

CL-USER> *root*
("root" "a" "b")

我的问题是:是否可以从 *root* 中检索到 c?类似于:(cdr (car (cdr *root*))) 返回错误。

最佳答案

您需要在 ADD-CHILD 中使用 NCONC 而不是 APPEND,因此您不会复制子树。

(defun add-child (tree child)
(setf (cdr tree) (append (cdr tree) child)))

通过此更改,在完成所有其他步骤后,我得到:

> *root*
("root" "a" "b" "c")
> (car (cdr (cdr (cdr *root*))))
"c"
> (cadddr *root*)
"c"

关于lisp - 获取列表中 elt 的 cdr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25055095/

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