首先,當我讀到Prolog上的不同謂詞時,例如http_server
,它的寫法如下:http_server(:Goal, +Options)
:
和+
是什麼意思?有時也寫?
。
其次,有時候我會看到變量聲明爲帶有下劃線的變量,如_Request
,即使沒有其他Request
,爲什麼?這些在序言中意味着什麼?
5
A
回答
7
的+
,-
,:
等印記被稱爲模式聲明。它們描述謂詞參數的預期實例,即是否需要用一個未綁定的變量,實例化的術語等來調用謂詞。這些不是完全標準化的;這裏是約定SWI-Prolog的的描述:http://www.swi-prolog.org/pldoc/man?section=modes
作爲第一個近似值,一個+
參數是一個輸入謂詞,你應該提供一個基礎項。一個-
參數是一個輸出的謂詞,謂詞將試圖將它與一個術語統一。一個?
項可能會在調用時部分實例化,謂詞可能會進一步實例化它。 A :
參數是一個元參數,即它是由謂詞調用的目標(例如,在setof/3
中)。
在http_server(:Goal, +Options)
的示例中,應該將第一個參數綁定到一個目標(可能是一個謂詞名)來調用此謂詞。第二個參數必須實例化,大概是在文檔中進一步描述格式的列表。如果你做而不是像這樣調用這個謂詞,例如,如果你傳遞一個未綁定的變量作爲第二個參數,你可能會得到意外的行爲或實例化錯誤。
至於你的第二個問題(最好是單獨的),以下劃線開頭的變量稱爲匿名變量。除了_
本身,每個這樣的變量每個子句只能出現一次,這可能會發生多次,並且在每次出現時引用單獨的變量。
對於只發生一次的非匿名變量,Prolog系統通常會發出「單變量變量」警告,因爲這些變量可能是拼寫錯誤或程序員忘記了某些東西的符號。你使用匿名變量來表達「這裏一定有某種東西(例如,一個謂詞參數),但我不在乎它是什麼」的概念。在你的例子中,大概你調用了一個有「請求」參數的謂詞,但是在你的特定用例中你不關心這個請求。
相關問題
- 1. 這些字段意味着什麼?
- 2. 這些警告意味着什麼C
- 3. 這些Java錯誤意味着什麼?
- 4. PREEMPTIVE_XE_DISPATCHER這意味着什麼?
- 5. * | *這意味着什麼CSS?
- 6. 這是&意味着什麼?
- 7. $這意味着什麼PHP?
- 8. 這個'&'在Ruby中意味着什麼?
- 9. 這在C中意味着什麼?
- 10. 在gdb中這意味着什麼?
- 11. 這在PowerPC中意味着什麼?
- 12. 這在AS3中意味着什麼?
- 13. 在MongoDB中這意味着什麼?
- 14. <?=這在C++中意味着什麼?
- 15. 爲什麼Xcode中的這些錯誤意味着什麼?
- 16. 這在Ruby語言中意味着什麼?
- 17. 這個斷言失敗在UITableViewDataSource中意味着什麼?
- 18. 這些變量在Kohana框架中意味着什麼?
- 19. 這些數字在Kannel SMSC日誌中意味着什麼?
- 20. 這些封裝括號在JavaScript中意味着什麼?
- 21. 這些詞在Git中意味着什麼:Repository,fork,branch,clone,track?
- 22. 這些問號在Windbg中意味着什麼?
- 23. 這些術語在CQ5/AEM環境中意味着什麼?
- 24. 這些數字在socket.io有效載荷中意味着什麼?
- 25. 這些特殊字符在Java中意味着什麼?
- 26. 這些在打印中意味着什麼?
- 27. 這些語句在C++/CX中意味着什麼?
- 28. 這些詞在編程環境中意味着什麼
- 29. 這些聲明在我的.htaccess文件中意味着什麼?
- 30. 這些奇怪的符號在js中意味着什麼?
謝謝,非常好的解釋。還有一件事我不明白,爲什麼叫'_Request'而不是'_'?僅僅爲了清楚起見,這是一個請求? – Ferus
是的,這只是爲了讓變量名更有表現力。 –