我对cons单元格有问题,我对lisp程序中的元素有疑问
这个列表中有多少元素?书上写着4,但我就是看不见。顺便说一句,这是常见的Lisp。在列表我对cons单元格有问题,我对lisp程序中的元素有疑问,lisp,common-lisp,Lisp,Common Lisp,这个列表中有多少元素?书上写着4,但我就是看不见。顺便说一句,这是常见的Lisp。在列表((一)代表所有人(和(两(我))),有四个元素:列表(一),符号代表所有人,符号代表所有人,列表(和(两(我)) 当您遇到这样的问题时,在REPL进行实验会很有帮助: ((one) for all (and (two (for me)))) 我们已经创建了空列表my list,并检查了它的长度 CL-USER> (setf my-list '()) NIL CL-USER> (length m
((一)代表所有人(和(两(我)))
,有四个元素:列表(一)
,符号代表所有人,符号代表所有人,列表(和(两(我))
当您遇到这样的问题时,在REPL进行实验会很有帮助:
((one) for all (and (two (for me))))
我们已经创建了空列表my list
,并检查了它的长度
CL-USER> (setf my-list '())
NIL
CL-USER> (length my-list)
0
我们已经创建了另一个列表,我的子列表
。请注意,此列表包含符号和
,以及列表(两个(对于我))
。length
返回的结果验证mysublist
是否包含两个元素(一个符号和一个列表)
我们将cons
edmy sublist
添加到my list
,以创建一个包含一个元素的列表,即list(和(两个(对于我))
。请注意,列表我的子列表
,即列表(和(两个(我))
包含两个元素,但是列表我的列表
——目前,((和(两个(我)))
——只包含一个元素,即列表我的子列表
CL-USER> (setf my-list (cons my-sublist my-list))
((AND (TWO (FOR ME))))
CL-USER> (length my-list)
1
我们添加了剩下的三个元素(符号all
和for
,以及列表(一)
。结果是一个由四个元素组成的列表,正如预期的那样。主要是让我抓狂的(和(两个(我)))部分。(和(两个(我))
是一个列表;这个列表是列表中的第四个元素(一个代表所有人(两个代表我))
(包含另外一个列表和两个符号)?一个“全部”(和两个(我)))
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
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
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