簡體   English   中英

prolog 中的關鍵字 is 和 = 有什么區別?

[英]What is the difference between the keyword is and = in prolog?

如果有人能詳細說明序言中is關鍵字和 = 運算符之間的區別,我將不勝感激。 我在== 和 = 中看到了這個討論,但它排除了is 文檔談到了一個我不清楚的“未綁定的左操作數”。 誰能詳細說明一下?

我有以下示例is

age(Person,X) :-
birth_year(Person,Y1),
current_year(Y2),
X is Y2-Y1. 

是差異分配還是比較? 任何幫助表示贊賞!

編輯: == 和is之間的關系is什么? 我不是在問 == 和 = 的關系,除非我對上述關系有誤解。

像往常一樣,稍微探索一下會有所幫助:

?- X = 2 + 1. % unify X with 2 + 1
X = 2+1.

?- X = 2 + 1, write_canonical(X). % how does Prolog see X?
+(2,1)
X = 2+1.

?- is(X, +(2,1)). % evaluate the term +(2,1) as an arithmetic expression
                  % and unify X with the result
X = 3.

關於X是自由變量的一點是,由於算術表達式的結果與其統一,當這些項不相同時,即使算術表達式看起來應該是這樣,您也可能會感到驚訝:

?- 1+2 is 2+1. % Evaluate 2+1 and try to unify with +(1,2)
false.

?- 1 is (1.5*2)-2. % Evaluates to 1.0 (float), unify with 1 (integer)
false.

?- 1+2 =:= 2+1.
true.

?- 1 =:= (1.5*2)-2.
true.

請記住, =/2is/2都是謂詞 它們也可以只是原子,因此它們也可以是函子的名稱。 兩者都被聲明為運算符。 我認為兩者都不應該被稱為“關鍵字”。

'is' 是一個運算符,'=' 也是一個運算符。 但他們在工作上有所不同。 'is' 應該僅在其 RHS 可以被評估時使用(或正常工作),前提是 'is' 的 RHS 上的所有操作數都被實例化(對它們有一個現成的值)。

例如:

?- X is X+1.

這將給出錯誤,直到“is”的 RHS 上的 X 已為其分配了值(已實例化)。

但是,以下內容將起作用:

?- X = 3, X is X+1.

現在 X 在這里變成了 4。

另一方面,'=' 不會導致將其 RHS 或任何類型的評估分配給 LHS。

?- X = 3 + 1.

這將給出 '3+1' 而不是 4。請記住,'=' 根本不會引起任何評估。

?- X is 3+1.

這將給出 4。

但是,以下工作如下:

?- X = 5, Y = X.

現在,Y 將變為 5,因為不需要求值。

'=' 也可用於匹配:

?- likes(john, X) = likes(Y, burger).
X = burger,
Y = john.

以上將是結果。

因此,“is”應該只在需要評估並且其 RHS 上的所有操作數都已實例化時使用。 '=' 應該僅在不需要評估並且目的是分配值或執行匹配時使用。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM