[racket] [racket-users]Is Racklog suitable to learn Prolog? A simple example just fails.
Mea cupla.
On Jul 17, 2014, at 3:31 PM, Jay McCarthy <jay.mccarthy at gmail.com> wrote:
> Matthias,
>
> Racklog did generate a stream of solutions, but WarGrey's program
> iterates through them all by calling (answer (%more)).
>
> I also recommend kanren, though.
>
> Jay
>
> On Fri, Jul 4, 2014 at 2:47 AM, Matthias Felleisen <matthias at ccs.neu.edu> wrote:
>>
>> Racklog should have generated a stream of solutions here. That's my problem
>> with it. -- Matthias
>>
>>
>>
>>
>>
>> On Jul 4, 2014, at 5:37 AM, Scott Moore 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
>>>>>
>>>>
>>>>
>>>
>>>
>>> ____________________
>>> Racket Users list:
>>> http://lists.racket-lang.org/users
>>>
>>
>>
>>
>> ____________________
>> Racket Users list:
>> http://lists.racket-lang.org/users
>>
>
>
>
> --
> Jay McCarthy
> http://jeapostrophe.github.io
>
> "Wherefore, be not weary in well-doing,
> for ye are laying the foundation of a great work.
> And out of small things proceedeth that which is great."
> - D&C 64:33