Data structures Lisp图形数据结构

Data structures Lisp图形数据结构,data-structures,common-lisp,Data Structures,Common Lisp,我正在阅读,其中包括一个用Lisp编写的树的描述。作者给出了这个基本示例: 然后给出一个Lisp列表表示: (1 (2 6 7 8) 3 (4 (9 12)) (5 10 11)) 其中position表示层次级别:1在列表中位于第一位,即,它位于顶部,2位于下一个级别,但它位于其级别的顶部,等等。但他给出了以下警告: 请注意,如果您需要在生产程序中表示树,除非有充分的理由,否则不应使用此处所述的列表。这只是了解cons细胞如何工作的练习 好的,我们应该如何在“生产”代码中表示树数据结构?顺

我正在阅读,其中包括一个用Lisp编写的树的描述。作者给出了这个基本示例:

然后给出一个Lisp列表表示:

(1 (2 6 7 8) 3 (4 (9 12)) (5 10 11))
其中position表示层次级别:1在列表中位于第一位,即,它位于顶部,2位于下一个级别,但它位于其级别的顶部,等等。但他给出了以下警告:

请注意,如果您需要在生产程序中表示树,除非有充分的理由,否则不应使用此处所述的列表。这只是了解cons细胞如何工作的练习

好的,我们应该如何在“生产”代码中表示树数据结构?顺便说一句,我还想看一个非循环有向图的例子,即类似于树的东西也有“多父”功能。例如,在上图中,8是2的子级,但也是3的子级。我猜是这样的:

(1 (2 6 7 8) (3 8) (4 (9 12)) (5 10 11))
但我似乎创造了一个8的“影子”孪生兄弟,并没有真正讲述3个孩子的8是如何与父母为2的8相同的。如果我想让3作为12的父母,这个问题会变得更糟

(1 (2 6 7 8) (3 8 12) (4 (9 12)) (5 10 11))
可以说,12处于较低层次的事实在洗牌过程中丢失了


在Lisp/Scheme/Clojure世界中是否有对数据结构的正确处理(书籍等)?我只找到过这样一次性的东西。

生产代码将使用CLOS(公共Lisp对象系统)定义一个
节点
类和图形/树上的操作

生产代码将使用CLOS(公共Lisp对象系统)来定义
节点
类和图形/树上的操作< P>假设安装了QuasLISP,那么您应该考虑枚举:(QL:StaseApPoPOS)图,并且也尝试CICLII/P>任何确定的“A&DS”。Lisp语言家族的书籍?@LawrenceBottorff:您可以轻松地将大多数“算法和数据结构”书籍改编为Lisp。程序、记录、数组。。。都可以在Lisp中使用。Lisp的特殊语言版本是不寻常的,因为市场很小,大多数Lisp程序员在阅读C、Java或Pascal示例时没有问题。是否有任何关于Lisp语言家族的权威“A&D”书籍?@LawrenceBottorff:您可以轻松地将大多数“算法和数据结构”书籍改编为Lisp。程序、记录、数组。。。都可以在Lisp中使用。Lisp的特殊语言版本是不寻常的,因为市场很小,大多数Lisp程序员在阅读C、Java或Pascal示例时没有问题。顺便说一句,以这种方式定义树的问题是,无法区分作为树的一部分的conse和作为元素存在于树中的conse之间的区别。解决这个问题的方法是定义数据结构(使用
defstruct
defclass
)将元素和树结构包含在单独的插槽中,这样就不需要区分它们了,以这种方式定义树的问题在于,无法区分作为树的一部分的conse和作为元素存在于树中的conse之间的区别。解决这个问题的方法是定义数据结构(使用
defstruct
defclass
),将元素和树结构包含在单独的插槽中,无需区分它们。