有没有办法在Prolog中创建索引数据集合?

时间:2012-04-18 13:35:50

标签: database arrays indexing prolog

考虑在Prolog中创建数据库,使用列表似乎显然无效。所以我想知道的是,是否有可能以某种方式通过索引访问元素,以及理论上如何建立一个大型数据库。

我很好奇的另一个主题是如何实现这样一个简单的任务:
假设我们有2个阵列
A [1,3,5,2,6,4]和B [“a”,“b”,“d”,“e”,“c”,“f”]
目标是将字母绑定到数字,然后对两个数组进行排序以获得
A [1,2,3,4,5,6]和B [“a”,“e”,“b”,“f”,“d”,“c”]

2 个答案:

答案 0 :(得分:3)

关于数据库问题:使用Prolog事实来存储数据是很常见的。 SWI-Prolog和其他系统自动构建动态索引,以支持快速访问此类集合。关于第二个问题,例如keysort/2用于术语[1-“a”,3-“b”,......,4-“f”]。请参阅libraries(keys)中的pairs_keys_values / 3和相关谓词。

答案 1 :(得分:1)

对于索引,您可能最好将列表表示为事实的集合,例如每个元素的isAtIndex( index, valueAtIndex )。据推测,然后,Prolog将使用它所拥有的任何索引机制来匹配您想要的适当事实(即,要求它证明isAtIndex(3,Value)并且它将Value绑定到匹配值)。

同样对于你的第二个问题:你将两个阵列一致地走,并为每个阵列断言pair(valueFromA, valueFromB)。然后你可以创建一个A的排序版本,然后你就可以了。