[英]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.
請記住, =/2
和is/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.