From: <mskala_at_ansuz.sooke.bc.ca>

Date: Mon, 15 Dec 2014 02:55:18 -0600 (CST)

Date: Mon, 15 Dec 2014 02:55:18 -0600 (CST)

On Mon, 15 Dec 2014, Choughule, Yogesh wrote: > :-lib(ic). > > solve(A, B) :- > > A $= 2, % A defined as 2 > B $= 3 + A, % A is used to calculate B > A $= B + 2. % A takes new value > > My question is, > Is there any way i can define A twice in the same code? Comma "," doesn't mean "Do this, then do that." It means "This must be true AND that must be true also." So your code above says: (A = 2) AND (B = A+3) AND (A = B+2). In principle all those things must be true at the same time; not one after another. So A = A+5 by simple algebra. It is not possible for A to be a number and that statement to be true (no number is equal to itself plus five) so the system detects it as a contradiction and returns failure. Variables in Prolog are like variables in mathematics. They are not like variables in Java. If you want to start with 2, add 3, and then add 2 more to get a sum of 7 using constraint programming, you must write something more like this: A $= 2, B $= 3 + A, C $= B + 2. There are other ways to do arithmetic in Prolog, for instance using "is", but that still won't cause "X AND Y" into "X, but then X stops being true and Y becomes true instead." If you want to undo the assignment of 2 to A, that is possible using backtracking, or non-logical operations like assert and retract, but there are other concepts you'll need to learn first. -- Matthew Skala mskala_at_ansuz.sooke.bc.ca People before principles. http://ansuz.sooke.bc.ca/Received on Mon Dec 15 2014 - 08:54:05 CET

*
This archive was generated by hypermail 2.2.0
: Mon Dec 15 2014 - 12:13:16 CET
*