gpt4 book ai didi

data-structures - 为什么 Racket 中的集合(或列表)以#0# 作为唯一的数据?

转载 作者:行者123 更新时间:2023-12-04 15:08:41 32 4
gpt4 key购买 nike

我正在编写一个广泛使用集合的 Racket 程序。查看程序的输出,有几个集合包含#0# 作为它们唯一的数据。这是什么原因造成的?

最佳答案

#0#用于 Racket 打印机描述cyclic data structures或具有共享内存的对象。基本上,它的工作方式是有一个标记为 #0= 的对象。 ,然后,当您看到 #0#指那个对象。

例如:

#0=(1 . #0#)

是一个无限长的列表,仅包含 1 s。这样做是因为创建的数据结构只是一个 cons 对,其中第一项是 1 ,并且第二项指向自身。

您可以拥有任意数量的这些来创建更复杂的图形结构。如:
#0=(#1=(1 . #0#) . #1#)

最后,您根本不需要循环数据结构。假设 x 是以下数据结构:
'(#0=#&42 . #0#)

(我们 #& 表示一个可变框),改变对中第一个元素中的元素会另外改变对第二部分中的元素。因此,如果这对设置为变量 x , 然后:
> x
'(#0=#&42 . #0#)
> (set-box! (car x) 43)
> (car x)
'#&43
> (cdr x)
'#&43
> x
'(#0=#&43 . #0#)

通常,您不能直接在代码中直接在代码中编写它,但可以使用 read 构造它.
> (define x (read)
#0=(1 . #0#)
> x
#0='(1 . #0#)
> (car x)
1
> (cadr x)
1
> (cdr x)
#0=1(1 . #0#)

你也可以修改阅读器,让你直接用 read-accept-graph 将它放入代码中。在读取模块的源代码时。

关于data-structures - 为什么 Racket 中的集合(或列表)以#0# 作为唯一的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39089556/

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