之间口齿不清差(利弊 '一个(利弊' B 'C))和(利弊' A“(b.c))
题
是什么区别:
(cons 'a (cons 'b 'c)) ;; (A B . C)
和
(cons 'a '(b.c)) ;; (A B.C)
我需要创建以下列表使用cons所以我试图了解是什么((A·B).C)“”表示。
<强> L.E 强>:我有以下(cons (cons 'a 'b) 'c)
但它产生((A . B) . C)
和不((A.B).C)
(注意多余的空格)
解决方案
空间用于单独的列表的令牌。 A.B
是单个令牌。 (A.B)
是一个单一的元素列表。 (A . B)
与A
如汽车和B
作为CDR一个cons单元。
一个缺点细胞是对“事物”(对象)。在你的情况下,这些东西是符号,它们被命名为A
,B
等。这样的细胞的印刷表示是(A . B)
,例如。这就是所谓的“点号”。第一元件被称为“车”,第二“CDR”。
该函数创建cons
这样的细胞。从而(cons 'a 'b)
产生细胞(A . B)
。 注意,名称总是内部upcased
这是最有可能你的老师想要的东西,所以((A . B) . C)
是正确的输出,你的代码正确的答案。这就是汽车指向另外一个小区的小区,而CDR包含C
。其他细胞是在轿厢包含A
和CDR B
的细胞。
顺便提及,一个列表是这样的缺点的细胞,从而使得车总是包含一个值和所述CDR指向列表的其余部分的线性链。最后CDR点无处(在Lisp中称为NIL)。用点表示,列表是例如(A . (B . (C . NIL)))
。由于名单是很重要的,他们可以这样写短:(A B C)
。如果最后的CDR具有一个值,而不是NIL,则在点标记,例如被示出(A . (B . (C . D))))
可以写成(A B C . D)
。
其他提示
两个字符之间.
是一个符号的一部分。 b.c
是具有三个字符的名称的符号: B'/ EM>, 和 C 的
如果你输入FOO.BAR
,然后Lisp的将它读成一个符号。
如果您输入(FOO.BAR)
然后Lisp的将它读成一个符号作为其内容的列表。
如果您输入(FOO . BAR)
然后Lisp的将它读成与FOO
的利弊细胞的的汽车的和BAR
为的 CDR 的。
.
被用于分隔 CAR 和一个cons单元的 CDR :(a . b)
。注意围绕.
的空间。
(cons 'b 'c)
创建与符号b
作为cons单元的 CAR 和符号c
作为 CDR 。它被写成(b . c)
。
(cons 'a '(b.c))
创建两个符号,a
和b.c
的列表。它被写成(a b.c)
。
((A.B).C)
总是打印为((A.B) . C)
。它也不是一个列表。
((a.b) . c)
是与列表(a.b)
作为cons单元的 CAR 和符号c
作为 CDR
如果这是在学习口齿不清的过程中,这个问题可能没有意味着规则隐含的“允许没有空间”,因为空间是不反对括号显著,而正确的答案是你给的一个。
在特别地,右括号后的空间总是被添加,但它是仅用于易读目的。它没有任何意义,要求它不被打印。