【发布时间】:2020-12-18 03:17:26
【问题描述】:
Common Lisp: A Gentle Introduction中有一个问题。问题是获取列表中的 last 元素而不是 cons 单元格。宏 LAST 在虚线列表中返回 cons cell。提出的问题是使用宏reverse 而不是last,但clisp 和sbcl 都抛出错误。
(reverse '(a b c . d))
=> error
CLHS 文档说我们只能反转正确的列表(序列),而不能反转点列表或循环列表。
编辑
我使用LAST编写了程序。
(defun last-element (x)
"x is a list with last element as dotted pair"
(cdr (last x)))
我不知道在这种情况下如何使用reverse。
【问题讨论】:
-
自己定义一个?
-
我应该使用
reverse定义我自己的函数。与应用编程和递归编程相关的章节尚未到来。另外,考虑使用nthcdr和nth。但我们不能将其一概而论。我已经编辑了我的问题。请参考。 -
附带说明,了解
last、reverse&c 是函数而不是宏非常重要。这种差异对于理解 Lisp 非常重要。尤其值得思考的是,为什么不能将reverse写成宏。您可能还不知道为什么,但请记住这一点。
标签: list lisp common-lisp cons