prolog 中的关键字 is 和 = 有什么区别?

jbl*_*ley 2 operators prolog keyword

如果有人能详细说明is序言中关键字和 = 运算符之间的区别,我将不胜感激。我在== 和 = 中看到了这个讨论,但它排除了is. 文档谈到了一个我不清楚的“未绑定的左操作数”。谁能详细说明一下?

我有以下示例is

age(Person,X) :-
birth_year(Person,Y1),
current_year(Y2),
X is Y2-Y1. 
Run Code Online (Sandbox Code Playgroud)

是差异分配还是比较?任何帮助表示赞赏!

编辑: == 和 之间的关系是什么is?我不是在问 == 和 = 的关系,除非我对上述关系有误解。

小智 5

像往常一样,稍微探索一下会有所帮助:

?- 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.
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

请记住,=/2andis/2都是谓词。它们也可以只是原子,因此它们也可以是函子的名称。两者都被声明为运算符。我认为两者都不应该被称为“关键字”。