Issue
I'd appreciate it if someone could elaborate on the difference between the is
keyword and the = operator in prolog. I saw this discussion in == and =, but it excludes is
. The documentation talks about an unclear to me "unbound left operand." Can anyone elaborate?
I have a following example of is
:
age(Person,X) :-
birth_year(Person,Y1),
current_year(Y2),
X is Y2-Y1.
Is the difference assignment vs comparison? Any help is appreciated!
Edit: What is the relationship between == and is
? I am not asking the relationship of == and =, unless I have a misunderstanding of the aforementioned relationship.
Solution
As usual, a bit of poking around helps:
?- 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.
The point about X
being a free variable is that since the result of the arithmetic expression is unified with it, you might get surprises when the terms are not the same even though the arithmetic expression seem as if they should be:
?- 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.
And please keep in mind that both =/2
and is/2
are predicates. They can also be just atoms, so they can also be names of functors. Both happen to be declared as operators. I don't think either should be called a "keyword".
Answered By - user1812457 Answer Checked By - Senaida (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.