2012-04-18 41 views
1

想到在Prolog中使用列表创建数据库似乎显然是无效的。所以我想知道的是,如果可能以某种方式通过索引访问元素,理论上可以创建大型数据库。有什么办法在Prolog中创建索引数据集合?

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

要清楚,我与Prolog无关,只需要知道如何在这里完成这些事情。

回答

1

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

同样对于你的第二个问题:你会走在2个阵列音乐会,断言像pair(valueFromA, valueFromB)为每个。然后你可以创建一个A的排序版本,并且你全部设置好了。

2

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

相关问题