The Prolog program looks like this (alpha renamed): a(X) :- b(X). a(Z) :- c(Z). b(1) :- !. b(2). c(2).
1. a(Y) unifies with [the head of] the first line, which gives us Y = X, and b(Y) as the goal. 2. b(Y) unifies with the third line, which gives us Y = 1. 3. Solution found: 1 4. Reject solution. 5. Backtracking on b fails due to prompt. 6. Backtrack on 2 and therefore on 1. 7. a(Y) unifies with the second line, which once again gives us Y = Z and c(Y) as the goal. 8. c(Y) unifies with the fourth line, which yields Y = 2. A cut is an exit continuation to the current relation that undoes local bindings. -- Matthias On Aug 13, 2012, at 2:15 PM, Jay McCarthy wrote: > Can you help me understand this example and why x should be 2? My > understanding of cut and prolog is that this should happen: > > a(X) [X = _ ] > ----> > b(X) ; c(X) [ X = _ ] > ----> > b(1) ; b(2); c(X) [ X = _ ] > ----> > X = 1; ! ; b(2) ; c(X) [ X = _ ] > ----> > ! ; b(2) ; c(X) [ X = 1 ] > > ! evaluates to succeed and then we get the X = 1 solution. > > But because we cut, the change to the X logic variable won't be > undone, so when we try we get to... > > b(2) ; c(X) > -----> > 1 = 2 ; c(X) > ----> > fail ; c(X) > ----> > c(X) > ----> > c(2) > -----> > 1 = 2 > ----> > fail > > and never see that X = 2 > > I must be wrong because you show that prologs actually give 2, but > could you help me see why? > > Jay > > On Sat, Aug 11, 2012 at 11:32 PM, Erik Dominikus > <erik.dominiku...@gmail.com> wrote: >> Racket version: >> >> 5.2. >> >> Output of 'uname -a': >> >> Linux kire 2.6.32-41-generic #91-Ubuntu SMP Wed Jun 13 11:43:55 UTC 2012 >> x86_64 GNU/Linux >> >> Symptom: >> >> In SWI Prolog (or any Prolog interpreter I think), querying a(X) gives >> X=1 and X=2. Racklog only gives x=1. >> >> How to reproduce: >> >> Download 'a.pl' (attached). >> Run 'prolog -f a.pl' (if using SWI Prolog). >> Enter 'a(X).'. >> Press ';' (semicolon) key until it prints false. >> >> Download 'a.rkt' (attached). >> Run 'racket a.rkt'. >> >> Expectation: >> >> Racklog gives x=1 and x=2. >> >> >> Thank you. >> >> ____________________ >> Racket Users list: >> http://lists.racket-lang.org/users >> > > > > -- > Jay McCarthy <j...@cs.byu.edu> > Assistant Professor / Brigham Young University > http://faculty.cs.byu.edu/~jay > > "The glory of God is Intelligence" - D&C 93 > ____________________ > Racket Users list: > http://lists.racket-lang.org/users
smime.p7s
Description: S/MIME cryptographic signature
____________________ Racket Users list: http://lists.racket-lang.org/users