假設我有列表Xs = [a,b,c].
現在我想遍歷所有元素並調用此元素的另一個函數。我的問題是:如何使用頭部和尾部做到這一點?我會很感激的幫助。Prolog遍歷列表
回答
通常,您不會在Prolog中進行迭代。取而代之的是,你寫的規則與一對遞歸條款的,就像這樣:
dosomething([]).
dosomething([H|T]) :- process(H), dosomething(T).
第一句加工基地的情況下,當列表[]
是空的。在這種情況下,沒有什麼可做的,所以規則的主體也是空的。
第二個子句處理您的列表中至少有一個元素的情況。語法[H|T]
與您的列表相結合,H
成爲列表的頭,T
成爲其尾部。例如,如果您處理dosomething([a,b,c])
,H
變爲a
,並且T
變爲[b,c]
。
這條規則的主體有兩部分。第一部分在頭上操作,在其上呼叫process
。這是您要爲列表的每個元素執行的規則。第二部分在列表的尾部遞歸地調用dosomething
規則。當尾部列表不爲空時,dosomething
的第二個子句將與較短的列表一起繼續處理。當尾部列表爲空時,第一個子句將統一,從而結束處理。
雖然這個答案是正確的,但它是非常20世紀70年代。與此同時,['maplist(process,[a,b,c])'](http://stackoverflow.com/a/30759136/772868)和['maplist/3','maplist/4 '...](http://stackoverflow.com/a/6683502/772868) – false
@false你是對的。然而,OP想知道「如何使用頭部和尾部」,所以我解釋了20世紀70年代的做法。我認爲對這個簡單代碼片段的深入理解對於理解Prolog的做事方式非常重要。當然Prolog從業者很快會發現'maplist/2',他們永遠不會回頭。 – dasblinkenlight
儘管我們在這裏回答提出的問題,但這些問題通常包含更好的被忽略的部分。 – false
- 1. Prolog的樹遍歷
- 2. Prolog中樹遍歷
- 3. 遍歷列表
- 4. 遍歷列表
- 5. 遍歷列表
- 6. 遍歷列表
- 7. 遍歷列表
- 8. 遍歷列表的列表?
- 9. Jquery遍歷列表
- 10. QTreeview遍歷列表
- 11. 遍歷列表python
- 12. 遍歷類列表
- 13. 遍歷表列-jQuery
- 14. 遍歷數列表
- 15. Python遍歷列表
- 16. 遍歷列表(Python)
- 17. 遍歷列表C#
- 18. JQuery遍歷表列
- 19. nextAll() - 多列表遍歷
- 20. Ansible - 遍歷字典列表
- 21. fish:遍歷數組/列表
- 22. 循環遍歷表列
- 23. 遍歷包含列表
- 24. 遍歷列表的Python
- 25. Python循環遍歷列表
- 26. 遍歷困難列表項
- 27. 遍歷YAML列表與Ansible
- 28. 遍歷haskell中的列表
- 29. 遍歷每個列表
- 30. Java遍歷對象列表
對於一件事地圖是你的朋友 – therealprashant