我知道这是一个模糊的问题,但仍然是:关于使它们比列表更适合嵌套的术语是什么?或者列表(内部)是嵌套术语的一个简单案例?
(我知道我可以“使用源代码”,例如SWI-Prolog,但是可以理解正确方向的指针)
答案 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