首页 > 解决方案 > 我在使用 cons 单元格时遇到问题,我对 lisp 程序中的元素有疑问

问题描述

((one) for all (and (two (for me))))

此列表中有多少个元素?书上说4,但我就是看不到。顺便说一句,这是 Common Lisp。

标签: lispcommon-lisp

解决方案


在列表中((one) for all (and (two (for me)))),有四个元素:列表(one)、符号for、符号all和列表(and (two (for me)))

当你有这样的问题时,在 REPL 上做实验会很有帮助:

CL-USER> (setf my-list '())
NIL
CL-USER> (length my-list)
0

我们创建了空列表my-list,并检查了它的长度。

CL-USER> (setf my-sublist '(and (two (for me))))
(AND (TWO (FOR ME)))
CL-USER> (length my-sublist)
2

我们创建了另一个列表,my-sublist. 请注意,此列表包含符号and和列表(two (for me))length验证返回的结果my-sublist包含两个元素(一个符号和一个列表)。

CL-USER> (setf my-list (cons my-sublist my-list))
((AND (TWO (FOR ME))))
CL-USER> (length my-list)
1

我们已经cons编辑my-sublistmy-list, 来创建一个包含一个元素的列表,即 list (and (two (for me)))。请注意,列表my-sublist,即列表(and (two (for me)))包含两个元素,但列表my-list——目前((and (two (for me))))——仅包含一个元素,即列表my-sublist

CL-USER> (setf my-list (cons 'all my-list))
(ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
2
CL-USER> (setf my-list (cons 'for my-list))
(FOR ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
3
CL-USER> (setf my-list (cons '(one) my-list))
((ONE) FOR ALL (AND (TWO (FOR ME))))
CL-USER> (length my-list)
4

我们添加了剩余的三个元素(符号allfor,以及列表(one)。结果是一个包含四个元素的列表,正如预期的那样。


推荐阅读