Just for the record:<div><br></div><div>If you&#39;d need to stay in the &quot;Prolog&quot; world with your summing, for example in order to use summing result in another predicate, here&#39;s the Racklog version:</div><div>

<br></div><div><div>(define %sum</div><div>   (%rel (x y xs acc)</div><div>    [(&#39;[] acc) (%= 0 acc)]</div><div>    [((cons x xs) acc) (%sum xs y) (%is acc (+ x y))]))</div></div><div><br></div><div>You can expect it will be slower than post-processing the resulting list in plain Racket.</div>

<div><br></div><div>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 &quot;backtractable&quot; results into plain list, then process the list in Racket.</div>

<div><br><br><div class="gmail_quote">On Mon, Sep 19, 2011 at 14:40, Wojciech Kaczmarek <span dir="ltr">&lt;<a href="mailto:wojtekk@kofeina.net">wojtekk@kofeina.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

In typical Prolog the simplest way would be to use aggregate: <div><br></div><div><a href="http://www.swi-prolog.org/pldoc/doc_for?object=section(2,&#39;A.1&#39;,swi(&#39;/doc/Manual/aggregate.html&#39;))" target="_blank">http://www.swi-prolog.org/pldoc/doc_for?object=section(2,&#39;A.1&#39;,swi(&#39;/doc/Manual/aggregate.html&#39;))</a></div>


<div><br><a href="http://www.swi-prolog.org/pldoc/doc_for?object=section(2,&#39;A.1&#39;,swi(&#39;/doc/Manual/aggregate.html&#39;))" target="_blank"></a></div><div><br></div><div>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.</div>


<div><br></div><div>Similar for Datalog - you can generate list by Datalog querying, then sum via regular Racket functions.</div><div><div></div><div class="h5"><div><br></div><div><br></div><div><br></div><div><div class="gmail_quote">

On Mon, Sep 19, 2011 at 11:25, Mark Carter <span dir="ltr">&lt;<a href="mailto:mcturra2000@yahoo.co.uk" target="_blank">mcturra2000@yahoo.co.uk</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">How do I create summing rules?<br>
<br>
Suppose I have the following facts:<br>
<br>
post(cash, 26) .<br>
post(cash, -16) .<br>
post(cash, 50) .<br>
post(beer, 20) .<br>
<br>
<br>
How do I create a rule &quot;bal&quot;<br>
bal(X, ???)<br>
such that the ??? gives me the sum of the second arguments in post satisfying the first argument X?<br>
<br>
Also, is there a way of writing floats, or is that out of the question?<br>
<br>
<br>
_________________________________________________<br>
  For list-related administrative tasks:<br>
  <a href="http://lists.racket-lang.org/listinfo/users" target="_blank">http://lists.racket-lang.org/listinfo/users</a><br>
<br>
</blockquote></div><br></div>
</div></div></blockquote></div><br></div>