gpt4 book ai didi

lisp - LISP 的每个缺点有何不同?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:30 29 4
gpt4 key购买 nike

这些是 cons 参数的不同组合的输出。我刚开始学习 lisp。有人可以帮我理解这些吗?

Break 80 [81]> (CONS '(A) 'B) 
((A) . B)
Break 80 [81]> (CONS '(A) '(B))
((A) B)
Break 80 [81]> (CONS 'A 'B)
(A . B)
Break 80 [81]> (CONS 'A '(B))
(A B)
Break 80 [81]>

最佳答案

cons 函数总是做同样的事情:它生成一个包含其参数的cons 单元。 cons cell 就是一对。您可以使用 car 获取该对的第一个元素,使用 cdr 获取第二个元素。

对于编写文字单元格,您可以引用并使用符号(x . y),其中x汽车ycdr。使用这种表示法,您可以按如下方式编写示例(但不要只相信我的话,请在 REPL 中尝试):

> '((A) .  B ) ;=> ((A) . B)
> '((A) . (B)) ;=> ((A) B)
> '( A . B ) ;=> (A . B)
> '( A . (B)) ;=> (A B)

但是为什么第二种和第四种情况的结果打印的方式和我们写的不一样呢? cons cells 有特殊的打印约定,因为我们使用 cons cells 来实现链表。

阅读14.1.2 Conses as Lists具体来说,列表是一个 cons 单元,其 car 是列表的第一个元素,其 cdr 是列表的其余部分(即另一个列表)。这意味着列表 (1 2 3) 与(使用文字点对符号)(1 . (2 . (3 . nil))) 相同。您可以在 REPL 中尝试:

> '(1 . (2 . (3 . nil))) ;=> (1 2 3)

对于列表如此基础的语言来说,这是一个非常有用的打印(和输入)约定。我也在对其他问题的回答中写了更多关于这个的内容:

关于lisp - LISP 的每个缺点有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926911/

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