为什么二叉树实现为嵌套术语,而不是嵌套列表?

时间:2013-04-14 07:29:15

标签: prolog

我知道这是一个模糊的问题,但仍然是:关于使它们比列表更适合嵌套的术语是什么?或者列表(内部)是嵌套术语的一个简单案例?

(我知道我可以“使用源代码”,例如SWI-Prolog,但是可以理解正确方向的指针)

2 个答案:

答案 0 :(得分:1)

如果您事先不知道元素的数量,则使用列表是有意义的。如果很清楚每个实体都有固定数量的元素(如二叉树中的节点的情况),则使用具有固定arities的术语比列表具有更高的内存效率。考虑例如结构:

node(Name, Left, Right)

这总共需要4个存储单元:一个用于仿函数,三个用于参数。

使用列表(在这种情况下为[Name, Left, Right])大约需要两倍的内存:

'.'(Name, '.'(Left, '.'(Right, []))).

3个单元格用于列表仿函数('。'),1个单元格用于[],3个用于参数。

也是一个挑剔:你当然知道,列表也是一个术语。不是列表,数字,对等的术语有时被称为"结构"。

答案 1 :(得分:0)

如上所述,Prolog列表只是两个术语之上的语法糖:'。'/ 2和'[]'。有关详细信息,请参阅此答案:Flatten a list in Prolog