<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 class="h5"><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="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</blockquote></div><br></div></div>