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

标签 prolog operators keyword

如果有人能详细说明 is 关键字和序言中的 = 运算符之间的区别,我将不胜感激。我在 == and = 中看到了这个讨论,但不包括 is。该文档谈到了一个我不清楚的“未绑定(bind)的左操作数”。任何人都可以详细说明吗?

我有一个的例子:

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

区别是赋值还是比较?任何帮助表示赞赏!

编辑:== 和 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 都是谓词。它们也可以只是原子,所以它们也可以是仿函数的名称。两者都恰好被声明为运算符。我认为两者都不应该被称为“关键字”。

关于prolog - 序言中的关键字 is 和 = 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072254/

相关文章:

Java继承和this关键字

Prolog列表长度比较返回true/false

javascript - jQuery @ 运算符?

c# - C#中()=>运算符的含义,如果存在的话

php - PHP 关键字是否区分大小写?

php - 无法获取特定网址的元标记

prolog - 右手上下文符号[DCG]

prolog - 在 SWI-Prolog 中自动化我的宠物调试策略

prolog - 学习序言 : solving a crossword scheme

r - 为什么data.frame上的 “^”返回矩阵而不是像 “*”那样返回data.frame?