[plt-scheme] Scheme Datalog

From: Jay McCarthy (jay.mccarthy at gmail.com)
Date: Mon Mar 23 17:58:39 EDT 2009

The sexp syntax is only understood by the sexp parsers. You can use it
inside a program by parsing and calling assume/prove. Here's a short
example:

#lang scheme
(require (planet jaymccarthy/datalog))

(define PARENT "john")
(define CHILD "billy")

(define thy (make-mutable-theory))

(assume! thy (sexp->clause `(parent ,PARENT ,CHILD)))

(map (lambda (l)
       (cons
        (constant-datum (first (literal-terms l)))
        (constant-datum (second (literal-terms l)))))
     (prove thy (stx->literal #'(parent ,X ,Y))))

when run:

(("john" . "billy"))

On Mon, Mar 23, 2009 at 3:40 PM, Stephen De Gabrielle
<spdegabrielle at gmail.com> wrote:
> Hi,
> I was looking to use datalog in a regular scheme program in the same
> way you might use SQL from scheme:
> e.g. (select ((pers first-name) (pers last-name)) (pers)) [scheme-pg-Z-G-33.gif]
>
> The following is taken from the test, but I don't know how I would
> integrate it with a scheme program. (I'm thinking of a program that
> reads in a set of family trees and then can tell if two  people are
> related.)  Can I just start asserting and querying like this?
>
> (define PARENT "john")
> (define CHILD 'billy)
>      (! (parent PARENT CHILD))
>      (? (parent PARENT CHILD))
>
>
> ;;
> #lang scheme
>  (require (planet jaymccarthy/datalog:1:1/sexp))
> (define test
>  #'(begin
>      (! (parent john douglas))
>      (? (parent john douglas))
>      (? (parent john ebbon))
>      (! (parent bob john))
>      (! (parent ebbon bob))
>      (? (parent ,A ,B))
>      (? (parent john ,B))
>      (? (parent ,A ,A))
>      (! (:- (ancestor ,A ,B)
>             (parent ,A ,B)))
>      (! (:- (ancestor ,A ,B)
>             (parent ,A ,C)
>             (ancestor ,C ,B)))
>      (? (ancestor ,A ,B))
>      (? (ancestor ,X john))
>      (~ (parent bob john))
>      (? (parent ,A ,B))
>      (? (ancestor ,A ,B))))
>
>
> (stx->program test)
> ;;
>
> Thanks,
> Stephen
>
>
>
>
> On Mon, Mar 23, 2009 at 1:50 PM, Jay McCarthy <jay.mccarthy at gmail.com> wrote:
>> There are some examples in the test suite:
>>
>> http://planet.plt-scheme.org/package-source/jaymccarthy/datalog.plt/1/1/tests/examples/
>>
>> I was getting a weird Scribble bug when I tried to document the s-exp
>> language better, but you can look directly at some of the tests:
>>
>> http://planet.plt-scheme.org/package-source/jaymccarthy/datalog.plt/1/1/tests/sexp.ss
>>
>> That's the same program as
>>
>> http://planet.plt-scheme.org/package-source/jaymccarthy/datalog.plt/1/1/tests/examples/tutorial.ss
>>
>> Hopefully this is helpful?
>>
>> Jay
>>
>> On Mon, Mar 23, 2009 at 3:31 AM, Mark Engelberg
>> <mark.engelberg at gmail.com> wrote:
>>> Can anyone point me to some problems/exercises that are interesting to
>>> solve using Datalog?
>>> Are there any more complete examples of the S-expression version of
>>> Datalog?  The tutorial seems to mostly use the version where you parse
>>> strings, and I'd like to see a couple S-expression examples to make
>>> sure I'm understanding the grammar correctly.
>>>
>>> Thanks,
>>>
>>> Mark
>>> _________________________________________________
>>>  For list-related administrative tasks:
>>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>>
>>
>>
>>
>> --
>> Jay McCarthy <jay at cs.byu.edu>
>> Assistant Professor / Brigham Young University
>> http://teammccarthy.org/jay
>>
>> "The glory of God is Intelligence" - D&C 93
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>>
>



-- 
Jay McCarthy <jay at cs.byu.edu>
Assistant Professor / Brigham Young University
http://teammccarthy.org/jay

"The glory of God is Intelligence" - D&C 93


Posted on the users mailing list.