如何在Prolog中实现自己的列表?

时间:2015-10-16 12:52:43

标签: list prolog logic logic-programming

我正在学习Prolog,我知道有一个数据结构已经实现来处理列表,但我想知道,如果由于某种原因我想实现自己的数据结构,我该怎么做?我不希望将实现作为答案,但有些想法会很棒。

感谢。

1 个答案:

答案 0 :(得分:6)

Prolog中的列表是带有一些语法糖的复合词。您可以使用以下查询显示规范语法:

| ?- write_canonical([]).
[]
yes

| ?- write_canonical([1,2,3]).
'.'(1,'.'(2,'.'(3,[])))
yes

如果将查询结果与列表数据结构的抽象定义进行比较,则可以看到空列表由原子[]表示,非空列表是'.'/2复合词,其中第一个参数是列表元素,第二个元素是列表。

您可以定义自己的数据结构"通过定义合适的复合词。一个好的起点是一个简单的二叉树。您将需要空树的表示,例如,原子nil,以及具有节点的三个参数的复合术语:节点元素,左侧树和右侧树。例如:tree(a, tree(c,nil,nil), tree(f,nil,tree(z,nil,nil)))。从这个例子中,你可以编写谓词,例如执行树遍历并在节点元素上调用一些谓词?例如。把它们写到标准输出?