你能用';列表';LISP中的命令?

你能用';列表';LISP中的命令?,lisp,common-lisp,Lisp,Common Lisp,我理解,通过使用cons我们可以得到如下结果: > (cons 'b 'c) (B . C) 这是因为单元格被一分为二,值是B和C 我的问题是,你能用list得到同样的结果吗?你不能让list返回虚线列表,因为在返回的列表中 但是,您可以使用list*返回虚线列表。使用list*函数,最后一个参数成为最后一个cons的cdr,因此: CL-USER>(列表*'a'(b)) (A)B) CL-USER>(列表*'a'b'()) (A)B) CL-USER>(列表*'a'b) (A.B) C

我理解,通过使用
cons
我们可以得到如下结果:

> (cons 'b 'c)
(B . C)
这是因为单元格被一分为二,值是
B
C


我的问题是,你能用
list
得到同样的结果吗?

你不能让
list
返回虚线列表,因为在返回的列表中

但是,您可以使用
list*
返回虚线列表。使用
list*
函数,最后一个参数成为最后一个
cons
cdr
,因此:

CL-USER>(列表*'a'(b))
(A)B)
CL-USER>(列表*'a'b'())
(A)B)
CL-USER>(列表*'a'b)
(A.B)
CL-USER>(列表*‘a’(b c))
(A、B、C)
CL-USER>(列表*'a'b'(c))
(A、B、C)
CL-USER>(列表*'a'b'c'())
(A、B、C)
CL-USER>(列表*'a'b'c)
(A B.C)
例如,
(列表*'a'b'c'())
(列表'a'b'c)
都相当于:

CL-USER>(cons'a(cons'b(cons'c'()))
(A、B、C)
但是
(列表*'a'b'c)
相当于:

CL-USER>(cons'a(cons'b'c))
(A B.C)
并且,
(列表*'a'b)
相当于:

CL-USER>(cons'a'b)
(A.B)

不可以,因为列表是最后一个
cdr
为零的cons单元格的列表。Lisp打印机知道约定,在这种情况下不打印点

;;囚室
CL-USER>(cons“b”c)
(B.C)
[o | o]--c
|
B
;; 两个cons单元格,以符号结尾:一个点。
CL-USER>(cons'b(cons'c'd))
(B C.D)
;; 几个cons单元格,以符号结尾:仍然是一个点(位于最后一个cons单元格):
CL-USER>(cons'b(cons'c(cons'd(cons'e'f)))
(B、C、D、E、F)
;; 两个cons单元格,以nil结尾:无点。
CL-USER>(cons'b(cons'c无))
(B)C);;而非(B C.无)
[o | o]--[o |/]
|       |
b c
;; 使用列表构造函数:
CL-USER>(列表“b”c)
(B)C