如何删除“.”来自 common Lisp 的列表?

问题描述 投票:0回答:1

我是 lisp 新手,在使用“

append
”时遇到困难。我必须重新排序列表并将输入列表的第一个元素作为输出列表的最后一个元素。我尝试过“
append
”和“
nconc
”,并且任何时候我得到我想要的列表,但在最后一个元素之前有一个“
.
”。这个点是什么意思?有什么办法可以避免出现这个符号吗?

非常感谢!

 (nconc (rest l)(first l)) >> (B C D E . A)

 (append (rest l) (first l)) >> (B C D E . A)
list append lisp common-lisp
1个回答
0
投票

在最基本的层面上,列表是通过一系列

cons
调用创建的:

(cons 1       2     )  ; (1 . 2)
(cons 1 (cons 2 NIL))  ; (1 2 . NIL)  = (1 2)

(cons 1 (cons 2       3     ))  ; (1 2 . 3)
(cons 1 (cons 2 (cons 3 NIL)))  ; (1 2 3 . NIL) = (1 2 3) 

NIL
是表示列表结束的特殊标记。因此,
NIL
之后的
.
可以与
.
一起消失。但是
.
之后的任何其他内容都不能。

append
是一个更高级别的函数,它附加两个列表

; l = (1 2 3)
(append (rest l) (first l))
=
(cons 2 (cons 3   1))
=
(     2       3 . 1)

之所以如此,是因为

first l
这里不是一个列表。但我们可以从中列一个清单

; l = (1 2 3)
(append (rest l) (list (first l)))
=
(cons 2 (cons 3  (list 1)))
=
(cons 2 (cons 3  (cons 1   NIL)))
=
(     2       3        1 . NIL  )
=
(     2       3        1        )
© www.soinside.com 2019 - 2024. All rights reserved.