2012-04-18 80 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和相關謂詞(對)。

相關問題