有沒有一種方法可以將元素添加到列表中,而不必關心它是否已經存在,並且列表中仍然不包含重複項?重寫列表元素?
重寫列表元素?
回答
如果您正在尋找效率,那麼在SWI-Prolog中可以使用比列表更好的數據結構。特別是,您的用例符合add_nb_set(+ Key,!Set,?New)。
參數New
控制WRT重複的行爲:您應該使用true
不關心。 參數Set
必須「分配」與empty_nb_set(Set)
編輯:我很抱歉,參數Set
必須是don't care behaviour
免費的變種,例如像add_nb_set(Key, Set, _)
,用於文檔的頁面明顯....
基本上你想實現一套;檢查l ist manual page的設置操作。 似乎沒有添加,但有union/3,所以你可以通過與一組新元素相交來添加元素(交集([NewEl],OldSet,NewSet)。注意,你不必將列表轉換爲集合(只要列表沒有重複,list_to_set/2就會消除);
現在,如果您有一個重複列表,並且您希望有時按照您陳述的方式添加一個元素,您將不得不自己實現的東西
OP想要聯合,而不是{singleton有一個新元素}和舊集合。交集只是空的,或者是那個單例 - 如果集合包含那個新元素。 「ord_union/2」似乎符合法案,只要OP維護他們的名單總是有序的。 http://www.swi-prolog.org/pldoc/man?predicate=ord_union%2f3 – 2012-07-24 13:04:46
@無疑,我的錯誤;固定 – 2012-07-24 20:44:15
你可以首先檢查項目是否包含在列表中添加它,只有當它不是 例如:。
add_no_duplicates(List, Item, NList):-
member(Item, List) -> NList=List ; NList=[Item|List].
測試:
?- add_no_duplicates([a,b,c],d,L).
L = [d, a, b, c].
?- add_no_duplicates([a,b,c,d],d,L).
L = [a, b, c, d].
注意的寫了add_no_duplicates/3需要輸入列表(列表)被實例化。
- 1. 列表元素重疊
- 2. Erlang重複元素列表
- 3. 重寫父元素
- 4. 重新排列列表元素 - jQuery?
- 5. 重新排列列表元素 - 序言
- 6. XMLSerializer不寫入列表中的元素
- 7. 重寫元素的CSS Inherance
- 8. 元素> system.webServer'具有無效子元素'元素'重寫'
- 9. 列表元素
- 10. 創建重複元素清單列表
- 11. 通用列表中的重複元素
- 12. Clojure ::重複元素的測試列表
- 13. 重複元素生成器列表
- 14. 刪除列表中的重複元素
- 15. 如何重命名XStream列表元素?
- 16. 消除連續重複列表元素
- 17. WPF - 從列表中重複元素
- 18. 刪除列表中的重複元素
- 19. 使用重複元素創建列表
- 20. Java - 重置列表中元素的值
- 21. 列表視圖中的重複元素
- 22. 插入元件,而不在PHP陣列重寫現有元素
- 23. Ng表,ng元素重複td元素不顯示列標題
- 24. 沒有重複元素的列表元素的所有組合
- 25. Python列表 - 重新排列元素(列表理解)
- 26. 按元素列表列出的元素列表python
- 27. 包含列表元素的列表的列表中的元素列表
- 28. 列表元素hightlight?
- 29. HTML列表元素
- 30. 取列表元素
你上下文不是特別清楚。語言..? – EricG 2012-07-24 10:29:37
對不起,我沒有標籤序言... – mezamorphic 2012-07-24 10:34:58
好吧我不知道任何關於序言,但我會想到使用數組。數組的存在類似[0,1,0,1](任何語言)正確:-)如果我的評論無用,請原諒我。 – EricG 2012-07-24 10:36:49