1

想到在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"]

4

2 回答 2

3

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

于 2012-04-18T13:43:36.777 回答
1

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

同样对于您的第二个问题:您将同时走 2 个数组,pair(valueFromA, valueFromB)为每个数组声明类似的东西。然后,您可以创建 A 的排序版本,一切就绪。

于 2012-04-18T13:42:40.200 回答