我的cons单元格有问题,我有一个关于lisp程序中元素的问题


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

这个列表中有多少元素?书上写着4,但我就是看不见。顺便说一句,这是普通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

我们在my-list上添加了consmy-sublist,以创建一个包含一个元素的列表,即列表(and (two (for me)))。请注意,列表my-sublist,即列表(and (two (for me)))包含两个元素,但列表my-list——此时为((and (two (for me))))——仅包含一个

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)。结果是如预期的那样,列出了四个元素。

CL-USER 14 > (do ((list '((one) for all (and (two (for me)))) (rest list))
(i 1 (1+ i)))
((null list))
(terpri)
(princ "Element ")
(princ i)
(princ " is ")
(princ (first list)))
Element 1 is (ONE)
Element 2 is FOR
Element 3 is ALL
Element 4 is (AND (TWO (FOR ME)))
NIL

相关内容

最新更新