我在使用SWI-Prolog中的round/1
和floor/1
內置插件時遇到問題。在我的代碼中使用它們時,它們無法識別,並在提交它們作爲查詢時;例如?- round(1.6).
,Prolog會告訴我該程序不被識別。難道我做錯了什麼?我在線上Swish版本和我自己的Windows安裝版本上都試過了,但是在兩者上都得到相同的錯誤。爲什麼Prolog不能識別這些內置函數?
1
A
回答
1
round/1
和floor/1
沒有內置謂詞,round/2
和floor/2
是。
Prolog使用謂詞。這意味着謂詞只能是true
或false
(或錯誤)。此外,它可以統一變量(更多)。
因此,計算floor
爲1.6的唯一方法是使用兩個變量,並使第二個變量位於第一個變量的底部。例如:
?- round(1.6,X).
X = 2.
?- floor(1.6,X).
X = 1.
因爲用這種方式編寫謂詞有時很麻煩。 Prolog定義了一些函子,這些函數可以用is/2
謂詞解釋。 round/1
和floor/1
是仿函數與在is/2
謂詞語義:
?- X is round(1.6).
X = 2.
?- X is floor(1.6).
X = 1.
is
可以用更高級的表達式樹工作,以及像:
?- X is floor(0.4+0.4+0.4).
X = 1.
但是請注意,is
實際上是謂也。我們已經寫:
is(X, floor(0.4+0.4+0.4)).
窗簾後面,is/2
斷言將調用floor/2
。但是請注意,你不能簡單地通過這種方式注入自己的謂詞。您不能簡單地寫is(X, foo(2))
並期望Prolog撥打foo(2.X)
。
相關問題
- 1. 爲什麼prolog不能識別查詢中的參數?
- 2. 爲什麼Xcode不能識別這些着色器?
- 3. Bukkit API爲什麼不能識別這些塊
- 4. Swift HTTP Post:爲什麼這些參數不被識別?
- 5. 爲什麼這個WCF服務不能識別UriTemplate參數?
- 6. 爲什麼Drupal不能識別我的javascript函數?
- 7. 爲什麼這些<form>不被FF和Chrome識別?
- 8. 爲什麼朋友成員函數不能自動識別爲函數模板?
- 9. 這些功能函數叫什麼?
- 10. 爲什麼Xcode不能識別PFFVideosUtils?
- 11. 爲什麼Eclipse不能識別$ PERL5LIB?
- 12. 爲什麼delphi不能識別對象?
- 13. 爲什麼eclipse不能識別webdriver.gecko.driver
- 14. 爲什麼程序不能識別pygame?
- 15. 爲什麼不能scala識別com.vaadin.ui.MenuBar.MenuItem
- 16. 爲什麼Xcode不能識別餘弦?
- 17. 爲什麼indexOf()不能識別空格?
- 18. 爲什麼kubernetes v1.5不能識別service.spec.loadBalancerIp?
- 19. 爲什麼我不能連接這些JS函數?
- 20. 爲什麼這些函數不能看到我的變量?
- 21. 爲什麼eclipse不能識別一些javadocs標籤?
- 22. 爲什麼LINQ to Entities不能識別某些方法?
- 23. 爲什麼java的URL類不能識別某些協議?
- 24. 爲什麼這個jQuery函數無法識別?
- 25. 爲什麼不能識別這個正則表達式?
- 26. 爲什麼這個掛鉤語法不能識別42?
- 27. 爲什麼不能識別這個實例變量?
- 28. 爲什麼JavaScript不能識別PHP的這個輸出?
- 29. 這個switch語句爲什麼不能識別subString?
- 30. 爲什麼這段代碼不能識別NSString是否相等?
*由於以這種方式編寫謂詞有時很麻煩,您也可以將它寫爲:... *我會在這裏小心。你可能會留下這樣的印象:表達式的任何謂詞'functor(...,X)'也可以表示爲'X是函數(...)',這顯然不是普遍適用的。它表明任何謂詞都有一個功能形式。對於所有的算術函數也並非總是如此。例如,你可以寫'X is min(2,3).'並得到'X = 2'。但'min(2,3,X)'失敗,因爲'min/3'不存在。 – lurker
@lurker:已更新。更好? –
我認爲* functor *的定義太具體。對於帶有參數的形式「foo(...)」的術語,「foo」被稱爲* functor *。它不是特定於算術函數。我可能會說Prolog中的某些內置謂詞是*算術函數*,因此可以與'is/2'以及其他算術運算符(*例如*,'>/2')一起使用。我不確定我會說替代形式是因爲另一種形式是「繁瑣的」(它們都是大致相同的打字量)。他們只是替代品。一個被明確用作算術函數。其他不是。 – lurker