gpt4 book ai didi

lisp - 列表末尾不接受特殊字符

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

我正在尝试来自 page 的示例当我尝试创建后序遍历时,请参阅前序遍历示例,

(defun bin-tree-postorder (B)
"Create a list containing keys of B in preorder."
(if (bin-tree-leaf-p B)
(list (bin-tree-leaf-element B))
(let ((elmt (bin-tree-node-element B))
(left (bin-tree-node-left B))
(right (bin-tree-node-right B)))
(cons (bin-tree-postorder left)
(cons (bin-tree-postorder right) elmt)))))

我正在获取 (((2) (3) . +) ((7) (8) .-) . *)但我想要'(2 3 + 7 8 - *)。当我尝试使用 append 时,它说“APPEND: A proper list must not end with”错误。如果在前面加上任何罚款+、-、/等等,但最后为什么会提示?

我需要帮助来解决这个问题。

最佳答案

您没有在这段代码中构建您要构建的内容:

(cons (bin-tree-postorder left)
(cons (bin-tree-postorder right)
elmt))

考虑以下几点:

> (cons 2 (cons 3 '+))
(2 3 . +)

> (cons (list 2) (cons (list 3) '+))
((2) (3) . +)

看看this answerDot notation in scheme有关列表中 . 表示法的更多信息,但浓缩版本是 Lisps(包括 Scheme)中的正确列表是:

  • 空列表();或
  • 一个 cons 单元,它的 car 是列表的第一个元素,它的 cdr 是一个 proper 列表,它是列表的其余部分.

这意味着要创建一个列表 (2 3 +),您需要等同于

(cons 2 (cons 3 (cons '+ '())))

你实际得到的是不同的:

您没有在这段代码中构建您要构建的内容:

(cons (bin-tree-postorder left)
(cons (bin-tree-postorder right)
elmt))
  • 因为left2(bin-tree-postorder left)(2)<
  • 因为right3(bin-tree-postorder right)(3)<
  • 因为 elmt+,所以 elmt(3)

那么你得到的是

> (cons '(2) (cons '(3) '+))
((2) (3) . '+)

如果你想使用append,那么你需要使最后一个参数成为一个合适的列表。例如:

(append (bin-tree-postorder left) (bin-tree-postorder right) (list elmt))

关于lisp - 列表末尾不接受特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133902/

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