嗨,我試圖插入一個列表中的元素,但它是非常重要的從我的程序,結果存儲在原始列表中,而不是在一個新的。
如果您創建了一個保存最終結果的新列表,那麼我在互聯網上編寫或發現的任何代碼都會成功。
所以我的問題是誰能告訴我如何定義一個函數:insert(X,L)其中X是一個元素,L是一個列表?插入列表中的元素並返回相同的列表更新
回答
不,Prolog只是不這樣工作。沒有「修改」一個值的東西。一個變量可以與一個特定值統一,但是如果它已經是[1,3]
,那麼以後它將永遠不會是[1,2,3]
。
正如aschepler所說,您不能添加或更改正確的列表,即每個元素已經綁定的列表。我們能做的唯一「修改」是將一個表達與另一個表達統一起來。
但是有一個部分列表的概念,可以在最後將「附加」元素添加到其中。這通常被稱爲差異列表,儘管該術語可能無法立即被理解。
假設我們開始,而不是一個空的列表,但與一個自由變量X.然而,人們可能會想到從X中減去X並得到「無」。也就是說,一個空的差異列表由X - X表示。這裏的減號「 - 」是一個純粹的形式運算符;沒有評估差異的意圖。這只是一個方便的語法,你可以從差異列表如何用來完成你(可能)想要做的事情看到。
我們可以用下面的元素添加到差異列表:
insertDL(M,X-Y,X-Z) :- Y = [M|Z].
這裏M爲我們要添加新的元素,XY是「舊」的區別列表,XZ是「新」通過將先前自由變量Y與部分列表[M | Z]統一起來,使得Z成爲部分列表X的「開放」尾部。
當我們最終完成將事物插入到差異列表中時,我們可以通過在該點將空白列表設置爲空白列表來將X轉換爲適當的列表。在這個意義上,X是與我們第一次開始時的「相同」變量,只是從自由變量到適當列表的增量步驟統一起來。
這是一個Prolog編程中非常強大的技術,需要一些練習才能使用它。一些環節,進一步討論在網絡上:
[從Prolog的列表,以差異表]
http://www.irisa.fr/prive/ridoux/ICLP91/node8.html
[Prolog中實現差異表]
http://www.cl.cam.ac.uk/~jpw48/difflists.pdf
[講義:差異表]
http://www.cs.cmu.edu/~fp/courses/lp/lectures/11-diff.pdf
- 1. 更新列表中的元素列表?
- 2. 將列表中的元素收集到相同元素列表的列表中?
- 3. 如何更新elif子句中的列表並返回列表
- 4. 更新表列後插入到相同的表-PLSQL
- 5. 如何添加2D列表的列元素並返回列表中的結果?
- 6. 元素CXF返回列表
- 7. 列表中的F#返回元素對
- 8. Python - 從列表中刪除鍵/值元素並返回新列表
- 9. 返回列表中的每個列表的元素範圍
- 10. 如何將列表中的元素插入到列表中?
- 11. 鏈接列表,通過返回新列表刪除元素
- 12. 列表理解,擺脫並行列表中的相應元素
- 13. 在插入和刪除列表中的元素後,檢查結果列表是否與預期列表相同
- 14. 調用列表中的相同函數並返回沒有重複的列表?
- 15. 在列表中使用相同元素的分割列表
- 16. 如何返回列表中元素的列表迭代器
- 17. 返回兩個列表中出現的元素列表--SML
- 18. dynamodb中的更新列表元素
- 19. 將元素插入到列表中的列表開頭
- 20. 返回名稱其中矢量和列表的元素相等
- 21. 搜索多維列表中的元素並返回子列表號?
- 22. 將兩個列表的相應元素合併到一個新列表中
- 23. 從列表中返回特定元素
- 24. 從列表中返回一個元素
- 25. 插入元素的列表,而迭代
- 26. 插入計算的元素列表
- 27. 在Python中以所有可能的方式在列表元素之間插入一些相同的新元素
- 28. 如何計算列表中的元素並返回字典?
- 29. OCaml在列表中插入元素
- 30. 在AsyncTask列表中插入元素
如果您需要更新該列表,那麼您試圖想的太過於迫切。你能更詳細地描述你想解決的問題嗎? – Juliet 2011-01-10 00:23:37