gpt4 book ai didi

Lisp 之间的区别 (cons 'a (cons ' b 'c)) and (cons ' a '(b.c))

转载 作者:太空宇宙 更新时间:2023-11-03 18:41:05 26 4
gpt4 key购买 nike

有什么区别:

(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) 是一个 cons cell,A 是汽车,B 是 cdr。

cons cell 是一对“事物”(对象)。在您的例子中,这些东西是符号,它们被命名为 AB 等。这种单元格的打印表示是 (A . B) ,例如。这称为“点符号”。第一个元素称为“car”,第二个元素称为“cdr”。

cons 函数创建这样一个单元格。 (cons 'a 'b) 因此生成单元格 (A . B)请注意名称在内部始终大写

这很可能是你的老师想要的,所以 ((A . B) . C) 是正确的输出,你的代码就是正确的答案。这是汽车指向另一个单元格的单元格,cdr 包含 C。另一个单元格是汽车包含 A 和 cdr B 的单元格。

顺便说一句,列表 是此类 cons 单元的线性链,因此 car 始终持有一个值,而 cdr 指向列表的其余部分。最后一个 cdr 指向任何地方(在 Lisp 中称为 NIL)。在点表示法中,列表是例如(A.(B.(C.NIL)))。由于列表很重要,因此可以将它们写得更短,如下所示:(A B C)。如果最后一个 CDR 有一个值而不是 NIL,则它以点符号显示,例如(A . (B . (C . D))))可以写成(A B C . D)

关于Lisp 之间的区别 (cons 'a (cons ' b 'c)) and (cons ' a '(b.c)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1859505/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com