<div dir="ltr">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.<br>
<br>That said, Matthias is probably right that using a currently maintained package is probably a good idea.<br><div><div class="gmail_extra"><br clear="all"><div>Cheers,<br>Scott</div>
<br><br><div class="gmail_quote">On Thu, Jul 3, 2014 at 7:46 PM, WarGrey Gyoudmon Ju <span dir="ltr"><<a href="mailto:juzhenliang@gmail.com" target="_blank">juzhenliang@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir="ltr">Okay, Thank you.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Jul 4, 2014 at 1:21 AM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><br></div><div>Yes, I corrected your program and ran into this bug. </div><div>

<br>
</div><div>Try to use Kanren instead of Racklog. It isn't completely a legacy package but I doubt we can get a quick fix here. </div><span><font color="#888888"><div><br></div><div>-- Matthias</div></font></span><div>


<div><div><br></div><div><br></div><div><br></div><br><div><div>On Jul 3, 2014, at 4:53 PM, WarGrey Gyoudmon Ju wrote:</div><br><blockquote type="cite"><div dir="ltr">Sorry, my example is not correct.<div>But this one still does not work:</div>


<div><br></div><div><div>#lang at-exp racket</div><div><br></div><div>(require racklog)</div><div><br></div><div>(define %edge</div>
<div>  (%rel ()</div><div>    [('a 'b)]</div><div>    [('b 'c)]</div><div>    [('c 'd)]</div><div>    [('d 'a)]))</div><div><br></div><div>(define %path</div><div>  (%rel (X Y Z)</div><div>



    [(X Y) (%edge X Y)]</div><div>    [(X Y) (%edge X Z) (%path Z Y)]))</div><div><br></div><div>(let answer ([r (%which (X Y) (%path X Y))])</div><div>  (printf "~a --> ~a~n" (cdar r) (cdadr r))</div><div>  (answer (%more)))</div>



</div><div><br></div><div>This version also will not terminate.</div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Jul 3, 2014 at 9:04 PM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br>



<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><br>
If you want to learn Prolog, why not use a free Prolog implementation?</blockquote><div><br></div><div>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.</div>



<div>So I wander if Racklog is a legacy package?<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">




<br>
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.<br>
<br>
-- Matthias<br>
<div><div><br>
<br>
<br>
On Jul 3, 2014, at 6:48 AM, WarGrey Gyoudmon Ju wrote:<br>
<br>
> This example is rewritten from the datalog version.<br>
><br>
> #lang racket<br>
><br>
> (require racklog)<br>
><br>
> (define %edge<br>
>   (%rel ()<br>
>     [('a 'b)]<br>
>     [('b 'c)]<br>
>     [('c 'd)]<br>
>     [('d 'a)]))<br>
><br>
> (define %path<br>
>   (%rel (X Y)<br>
>     [(X Y) (%edge X Y)]<br>
>     [(X Y) (%edge X 'Z)<br>
>              (%path 'Z Y)]))<br>
><br>
> (%find-all (X Y) (%path X Y))<br>
><br>
> It only gives four results.<br>
><br>
> #lang racklog<br>
><br>
> edge(a, b).<br>
> edge(b, c).<br>
> edge(c, d).<br>
> edge(d, a).<br>
><br>
> path(X, Y) :- edge(X, Y).<br>
> path(X, Y) :- edge(X, Z), path(Z, Y).<br>
><br>
> path(X, Y)?<br>
><br>
> and this version will not terminate.<br>
><br>
> Thanks in advance.<br>
</div></div>> ____________________<br>
>  Racket Users list:<br>
>  <a href="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" target="_blank">http://lists.racket-lang.org/users</a><br>


<br>
</blockquote></div><br></div></div>
</blockquote></div><br></div></div></div></blockquote></div><br></div>
<br>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br></blockquote></div><br></div></div></div>