有什么区别:
(cons 'a (cons 'b 'c)) ;; (A B . C)
and
(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
as cdr.
一个 cons 单元是一对“东西”(对象)。就你而言,这些东西是符号,它们被命名为A
, B
等。这种单元格的打印表示是(A . B)
, 例如。这称为“点表示法”。第一个元素称为“car”,第二个元素称为“cdr”。
功能cons
创建这样一个单元格。(cons 'a 'b)
从而产生细胞(A . B)
. 请注意,名称始终在内部大写.
这很可能就是你的老师想要的,所以((A . B) . C)
是正确的输出,并且您的代码是正确的答案。这是一个汽车指向另一个单元格的单元格,并且 cdr 包含C
。另一个单元格是汽车包含的单元格A
和 cdrB
.
顺便说一下,一个list是此类 cons 单元的线性链,这样 car 始终保存一个值,并且 cdr 指向列表的其余部分。最后一个 cdr 没有指向任何地方(在 Lisp 中称为 NIL)。在点表示法中,列表例如是(A . (B . (C . NIL)))
。由于列表很重要,因此可以将它们写得更短,如下所示:(A B C)
。如果最后一个 CDR 具有值而不是 NIL,则它以点表示法显示,例如(A . (B . (C . D))))
可以写成(A B C . D)
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)