2012-01-28 57 views
0

我讀書時遇到問題。 我看到一個程序使用謂詞「簡單」(我猜simple/1)。我不知道這個謂詞的含義是什麼,我在控制檯中找不到?-help(simple)。 但是,當我在控制檯某些查詢嘗試,它的工作是這樣的:Prolog中的謂詞「simple/1」是什麼意思(SWI-Prolog)

5 ?- simple(p(x)). 
false. 

6 ?- simple(mia). 
true. 

7 ?- simple(Mia). 
true. 

8 ?- simple(f(Mia)). 
false. 

我想這是某種形式的謂語,以確定是否論據條款(或變量)或複雜的術語。

回答

2

swi-prolog manual具有以下定義:

簡單(@Term)被semidet 期限是原子或一個變量。

定義在quintus prolog兼容庫中;在quintus prolog documentation的定義是:

簡單(+期限)

期限當前實例化到任何一個原子,一個數字,一個數據庫 或一個變量。

在任何情況下

,簡單/ 1爲真,如果該參數是一個簡單的術語(不知道Quintus的手冊是指數據庫中的哪些;可能對ODBC連接我猜的處理程序)

0

轉換爲ISO謂詞:

simple(T) :- var(T) ; atomic(T). 

VAR/1它的最基本的元編程裝置,因爲這是不可能的謂詞(即執行代碼,結合變量)約任何條款沒有實例化的變量,這是我們感興趣的基本部分的許多倍。

+0

作爲一般性評論 - 「simple/1」這樣的定義並不是很有用,因爲它將兩個測試級別合併到一個謂詞中。 – false 2012-02-17 00:51:50

+0

@false:你的意思是這個分解引入了一個無用的選擇點嗎?我不知道'測試級別'是什麼...... – CapelliC 2012-02-17 09:40:05

+1

當您編寫顯式依賴於參數實例化的謂詞時,最好將實例化測試分開var(X)',nonvar (X)'來自其他測試。特別是,明確處理這兩種情況是一個好主意。否則,很難推斷謂詞。 '簡單/ 1'混合兩個級別。而且,順便說一句。也''原子/ 1','整數/ 1'等做到這一點。但是,如果你以前做過'var' /'nonvar'測試,那麼它們的問題就更少了。 – false 2012-02-17 12:53:59