<p>Guile log sports full garbage collection of logical variables which makes it suitable to run server like prolog code. It is experimental but working. Unfourtunately the bdw-gc that guile uses does not allow this to work effectively and hence you need to download and replace the standard bdw-gc with a modified version of it. You may find it at

<p>Almost all of the kanren interface is implemented ontop of guile-log to use it import <code>logic guile-log kanren</code>. One could say that the kanren interface is the functional sister to guile-log which is more a macro framework as such guile-log is about 2x faster the kanren, but kanren has more beutifull semantics.

E.g. the kanren operation maps function arguments to functions. The kanren interface is divided into two categories of functionals, facts and relations. One combine facts into relations. The main difference is that fact functions have standardized arguments and relations have customized arguments. Also conversely evaluating the relation will return back a fact.

<p><code>_</code>, produces a fress new logical variable in it&rsquo;s place.

</p>

<aname="relations"></a>

<h3class="section">15.2 relations</h3>

<h3class="section">14.2 relations</h3>

<aname="index-relation"></a>

<aname="index-fact"></a>

<aname="index-extend_002drelation"></a>

...

...

@@ -202,7 +202,7 @@ variables <code>id ...</code>. E.g.

</p>

<aname="Queries"></a>

<h3class="section">15.3 Queries</h3>

<h3class="section">14.3 Queries</h3>

<aname="index-query"></a>

<aname="index-solve"></a>

...

...

@@ -215,7 +215,7 @@ variables <code>id ...</code>. E.g.

<p><code>(solution (v ...) g ...</code>, This is the same as <code>(solve 1 (v ...) g ...)</code>.

</p>

<aname="Misc"></a>

<h3class="section">15.4 Misc</h3>

<h3class="section">14.4 Misc</h3>

<aname="index-trace_002dvars"></a>

<aname="index-partially_002deval_002dsgl"></a>

...

...

@@ -224,7 +224,7 @@ variables <code>id ...</code>. E.g.

<p><code>partially-eval-sgl</code>, not implemented, because guile-log is also directed towards stacks and assq lists and hence usually uses another kind of implementation for the interleaving constructs.

<p>Guile log also sports an iso-prolog interface as a logic programming interface besides kanren. The interface is pretty complete at this point appart a few points that have not yet been resolved but sure it is currently alpha software and help is very very much appriciated. With this most programs written in iso prolog should probably work. The intention is to enhance this interface so that the bulk of already written prolog programs should be able to run on guile. We will also add the fetures unique to guile-log and hence enhance the prolog experience. Featurewise guile-log prolog is taking over many properties of scheme like closures, continuations, delimeted continuations, the interleaving constructs of kanren and a delicate system to treat dynamic objects like dynamic functions, dynamic hashes and a library to tell how you want the dynamism to work at a fine grained level.

<tr><tdalign="left"valign="top">&bull;<ahref="prolog_002ddynamic_002dfunctions.html#prolog_002ddynamic_002dfunctions"accesskey="8">prolog-dynamic-functions</a>:</td><td>&nbsp;&nbsp;</td><tdalign="left"valign="top">A discussion of guile log&rsquo;s version of this

<tr><tdalign="left"valign="top">&bull;<ahref="prolog_002ddynamic_002dfunctions.html#prolog_002ddynamic_002dfunctions"accesskey="9">prolog-dynamic-functions</a>:</td><td>&nbsp;&nbsp;</td><tdalign="left"valign="top">A discussion of guile log&rsquo;s version of this

<tr><tdalign="left"valign="top">&bull;<ahref="prolog_002dlibraries.html#prolog_002dlibraries">prolog-libraries</a>:</td><td>&nbsp;&nbsp;</td><tdalign="left"valign="top">Libraries that exposes guile-log features