[racket] Datalog: summing

From: Wojciech Kaczmarek (wojtekk at kofeina.net)
Date: Mon Sep 19 08:55:42 EDT 2011

Just for the record:

If you'd need to stay in the "Prolog" world with your summing, for example
in order to use summing result in another predicate, here's the Racklog
version:

(define %sum
   (%rel (x y xs acc)
    [('[] acc) (%= 0 acc)]
    [((cons x xs) acc) (%sum xs y) (%is acc (+ x y))]))

You can expect it will be slower than post-processing the resulting list in
plain Racket.

One mode of operation which generally seems reasonable is to perform any
complicated queries in Racklog, then call bag-of/set-of to turn all
"backtractable" results into plain list, then process the list in Racket.


On Mon, Sep 19, 2011 at 14:40, Wojciech Kaczmarek <wojtekk at kofeina.net>wrote:

> In typical Prolog the simplest way would be to use aggregate:
>
>
> http://www.swi-prolog.org/pldoc/doc_for?object=section(2,'A.1',swi('/doc/Manual/aggregate.html'))
>
>
> <http://www.swi-prolog.org/pldoc/doc_for?object=section(2,'A.1',swi('/doc/Manual/aggregate.html'))>
>
> In Racklog you can simply use bag-of to generate a list of your facts
> satisfying some predicate, then sum it on the Racket side eg. using foldl.
>
> Similar for Datalog - you can generate list by Datalog querying, then sum
> via regular Racket functions.
>
>
>
> On Mon, Sep 19, 2011 at 11:25, Mark Carter <mcturra2000 at yahoo.co.uk>wrote:
>
>> How do I create summing rules?
>>
>> Suppose I have the following facts:
>>
>> post(cash, 26) .
>> post(cash, -16) .
>> post(cash, 50) .
>> post(beer, 20) .
>>
>>
>> How do I create a rule "bal"
>> bal(X, ???)
>> such that the ??? gives me the sum of the second arguments in post
>> satisfying the first argument X?
>>
>> Also, is there a way of writing floats, or is that out of the question?
>>
>>
>> _________________________________________________
>>  For list-related administrative tasks:
>>  http://lists.racket-lang.org/listinfo/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20110919/f26e9919/attachment.html>

Posted on the users mailing list.