[racket] [racket-users]Is Racklog suitable to learn Prolog? A simple example just fails.
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 <matthias at 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
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140703/c3820a28/attachment.html>