I'm not sure what behavior you were expecting for this program. Under standard prolog semantics (goal-directed) this program will yield infinitely many solutions, so this may not be a bug in racklog but rather in the program.
That said, Matthias is probably right that using a currently maintained package is probably a good idea. Cheers, Scott On Thu, Jul 3, 2014 at 7:46 PM, WarGrey Gyoudmon Ju <juzhenli...@gmail.com> wrote: > Okay, Thank you. > > > On Fri, Jul 4, 2014 at 1:21 AM, Matthias Felleisen <matth...@ccs.neu.edu> > wrote: > >> >> Yes, I corrected your program and ran into this bug. >> >> Try to use Kanren instead of Racklog. It isn't completely a legacy >> package but I doubt we can get a quick fix here. >> >> -- Matthias >> >> >> >> >> On Jul 3, 2014, at 4:53 PM, WarGrey Gyoudmon Ju wrote: >> >> Sorry, my example is not correct. >> But this one still does not work: >> >> #lang at-exp racket >> >> (require racklog) >> >> (define %edge >> (%rel () >> [('a 'b)] >> [('b 'c)] >> [('c 'd)] >> [('d 'a)])) >> >> (define %path >> (%rel (X Y Z) >> [(X Y) (%edge X Y)] >> [(X Y) (%edge X Z) (%path Z Y)])) >> >> (let answer ([r (%which (X Y) (%path X Y))]) >> (printf "~a --> ~a~n" (cdar r) (cdadr r)) >> (answer (%more))) >> >> This version also will not terminate. >> >> On Thu, Jul 3, 2014 at 9:04 PM, Matthias Felleisen <matth...@ccs.neu.edu> >> wrote: >> >>> >>> If you want to learn Prolog, why not use a free Prolog implementation? >> >> >> Simply speaking, Modern Prolog seems to cut the illumos-based SunOS off, >> I cannot build it without headache and they does not answer me about this >> issue. >> So I wander if Racklog is a legacy package? >> >> >>> >>> If you want to learn about relational programming, use miniKanren, which >>> is available of cKanren. Then you can also get to constraints. Maintainer >>> cc-ed. >>> >>> -- Matthias >>> >>> >>> >>> On Jul 3, 2014, at 6:48 AM, WarGrey Gyoudmon Ju wrote: >>> >>> > This example is rewritten from the datalog version. >>> > >>> > #lang racket >>> > >>> > (require racklog) >>> > >>> > (define %edge >>> > (%rel () >>> > [('a 'b)] >>> > [('b 'c)] >>> > [('c 'd)] >>> > [('d 'a)])) >>> > >>> > (define %path >>> > (%rel (X Y) >>> > [(X Y) (%edge X Y)] >>> > [(X Y) (%edge X 'Z) >>> > (%path 'Z Y)])) >>> > >>> > (%find-all (X Y) (%path X Y)) >>> > >>> > It only gives four results. >>> > >>> > #lang racklog >>> > >>> > edge(a, b). >>> > edge(b, c). >>> > edge(c, d). >>> > edge(d, a). >>> > >>> > path(X, Y) :- edge(X, Y). >>> > path(X, Y) :- edge(X, Z), path(Z, Y). >>> > >>> > path(X, Y)? >>> > >>> > and this version will not terminate. >>> > >>> > Thanks in advance. >>> > ____________________ >>> > Racket Users list: >>> > http://lists.racket-lang.org/users >>> <https://urldefense.proofpoint.com/v1/url?u=http://lists.racket-lang.org/users&k=AjZjj3dyY74kKL92lieHqQ%3D%3D%0A&r=HSKF6zsWgVGxFXZ9yyuTrGxfxvWcBXEsUbj4zoaWV4M%3D%0A&m=ueJMPMBM%2B38vGv%2FQ4VGiv1iOnLuujJtGYjC98mcEH4k%3D%0A&s=63daad8e5afeca69fe348a0517fbfc586b2831b5a89af8dd27931ceecb5bf0e6> >>> >>> >> >> > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > >
____________________ Racket Users list: http://lists.racket-lang.org/users