Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我对cons单元格有问题,我对lisp程序中的元素有疑问_Lisp_Common Lisp - Fatal编程技术网

我对cons单元格有问题,我对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

这个列表中有多少元素?书上写着4,但我就是看不见。顺便说一句,这是常见的Lisp。

在列表
((一)代表所有人(和(两(我)))
,有四个元素:列表
(一)
,符号
代表所有人
,符号
代表所有人
,列表
(和(两(我))

当您遇到这样的问题时,在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
ed
my 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