((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
上添加了cons
和my-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
all
和for
,以及列表(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