之间口齿不清差(利弊 '一个(利弊' B 'C))和(利弊' A“(b.c))

StackOverflow https://stackoverflow.com/questions/1859505

  •  13-09-2019
  •  | 
  •  

是什么区别:

(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单元。

一个缺点细胞是对“事物”(对象)。在你的情况下,这些东西是符号,它们被命名为AB等。这样的细胞的印刷表示是(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))创建两个符号,ab.c的列表。它被写成(a b.c)

((A.B).C)总是打印为((A.B) . C)。它也不是一个列表。

((a.b) . c)是与列表(a.b)作为cons单元的 CAR 和符号c作为 CDR

如果这是在学习口齿不清的过程中,这个问题可能没有意味着规则隐含的“允许没有空间”,因为空间是不反对括号显著,而正确的答案是你给的一个。

在特别地,右括号后的空间总是被添加,但它是仅用于易读目的。它没有任何意义,要求它不被打印。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top