所以基本上我的任務是創建一個給定列表的集合,其中包含一個包含2個參數的謂詞。從Prolog中的列表創建一個集合
第一個是列表,第二個是Set的值。
但是不知它給了我其中包含設置作爲頭具有可變A尾巴列表:
2 ?- list2set([2,3,4,4] , X).
X = [2, 3, 4|_G2840] .
多數民衆贊成代碼:
list2set([] , _).
list2set([ListH|ListT] , Set) :- member(ListH, Set) , list2set(ListT , Set).
這似乎是一個很基本的我犯的錯。
是什麼使定義中的集合成爲一個集合?你只是想要一個具有獨特元素的列表?要成爲傳統定義的「集合」意味着元素的排序無關緊要,而且它們都是獨一無二的。只有當您考慮要在該集上執行什麼操作時,元素的排序纔會變得有意義。 – lurker
Set是一種代數數據類型,其對象配有一個函數,該函數給出一個對象測試對象是否在Set中,或不在O(1)處。實質上它是一個哈希映射,其鍵未被使用。列表具有O(n)最差情況下的查找時間,並且通常通過不連續的分配鏈接來保證緩存未命中。對於一個集合來說,它必須被分攤到O(1)訪問時間。 – Dmitry