[racket] [racket-users]Is Racklog suitable to learn Prolog? A simple example just fails.
Under standard prolog semantics Racklog is right.
The semantics between prolog and datalog is different.
Okay, thank you for pointing me.
On Fri, Jul 4, 2014 at 11:37 AM, Scott Moore <sdmoore at fas.harvard.edu>
wrote:
> 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 <juzhenliang at gmail.com
> > wrote:
>
>> Okay, Thank you.
>>
>>
>> On Fri, Jul 4, 2014 at 1:21 AM, Matthias Felleisen <matthias at 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 <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
>>>> <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
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20140704/2b4a1366/attachment-0001.html>