I added an example of non local aka. really recursive query as a test 
<https://git.sr.ht/~amz3/azul/tree/08fb37a0ba424b275fc63ffb2f1c1099dc144ac3/src/azul/data/base/yiwen.test.scm#L112-158>



On Tuesday, February 26, 2019 at 6:41:49 PM UTC+1, Amirouche Boubekki wrote:
>
> Hello,
>
>
> Following on my previous work with mini/micro kanren with wiredtiger 
> storage engine.
>
> I made a in-memory triple store with minikanren querying.
>
> The source is attached to this mail. It can also be found at source hut 
> <https://git.sr.ht/~amz3/azul/tree/master/src/azul/data/base/yiwen.scm>.
> There is a few tests in yiwen.test.scm 
> <https://git.sr.ht/~amz3/azul/tree/master/src/azul/data/base/yiwen.test.scm>. 
> The full minikanren language is
> supported even recursive queries like appendo. There is no tests for that,
> tho, because I did not find a good example of recursive queries in triple 
> store
> setting. 
>
> In the code 'azul logic' is minikanren from the reasoned schemer second 
> edition.
> It rely on r7rs scheme mapping module that is actually srfi 146 
> <https://git.sr.ht/~amz3/azul/tree/master/src/azul/data/base/yiwen.scm> 
> which is 
> (like wiredtiger) an ordered mapping. It is less that 200 sloc.
>
> This should be easy to port to any scheme that has some kind of ordered 
> mapping.
> The current implementation rely on a red-black tree.
>
> Also, it is not RDF. It is not datomic either because I does not force to 
> declare a 
> schema upfront. Garbage in, garbage out!
>
> All scheme base data types (string, fixnum, floatnum, array, cons/lists, 
> symbol) are
> supported as subject, predicate and value. They are compared using their 
> respective
> equal predicate and comparator (see SRFI 128 comparators 
> <https://srfi.schemers.org/srfi-128/>). It seems to work with
> records like srfi-9 too.
>
> I am currently experimenting with that triple store as an application tree 
> to build an 
> editor. An editor has more or less deeply nested structures think about 
> the rendering 
> tree of horizontal and vertical panes. You might think zippers or cursors. 
>
> The triple store allows to easily represent recursive data structures in a 
> single flat 
> namespace by introducing indirection between a key-value pair 
> (predicate-object) 
> and its 'subject'. Also, the fact that the triple store is a sort-of 
> global unique data 
> structure that stores everything, it makes it easy to debug state. Not 
> introducing
> zipper or cursors is easier to my mind because at the end of the day a 
> triple store 
> is a mapping that is ordered.
>

-- 
You received this message because you are subscribed to the Google Groups 
"minikanren" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/minikanren.
For more options, visit https://groups.google.com/d/optout.

Reply via email to