On Sat, Dec 4, 2010 at 6:39 PM, Jules <julesjac...@gmail.com> wrote:

> Interesting. Is Byrd's dissertation available online?


Yes I added that and several other resource links to the bottom of the
project's description on the GitHub repo.

David


> On Dec 4, 9:41 pm, David Nolen <dnolen.li...@gmail.com> wrote:
> > I announced it earlier this week on Twitter, but it's now come far along
> > enough to be usable. You can write fun stuff like the following:
> >
> > (defn likes
> >   [x y]
> >   (cond-e
> >    ((== x 'john) (== y 'mary))
> >    ((== x 'mary) (== y 'john))))
> >
> > (defn musician [x]
> >   (cond-e
> >    ((== x 'john))
> >    ((== x 'bob))))
> >
> > (run* [q]
> >   (likes q 'mary)
> >   (musician q))
> > ;; [john]
> >
> > (run* [q]
> >   (musician q))
> > ;; [john bob]
> >
> > (run* [q]
> >   (exist [x y]
> >     (likes x y)
> >     (== [x y] q)))
> > ;; [[john mary] [mary john]]
> >
> > My inspiration to start on this was Jim Duey's implementation. However I
> had
> > two specific goals -
> >
> > * Focus on performance. While developing I compared performance against
> > miniKanren under Racket - I made sure the Clojure implementation ran at
> > least as fast, and in many cases it runs quite a bit faster
> > * Implement "growable" sequences without resorting to Scheme's dotted
> pairs.
> > This required me to develop a new protocol in which iteration might
> return a
> > logic var instead of nil or a Seq.
> >
> > The implementation started with the one described William Byrd's
> > dissertation. However a considerable number of changes were made-
> >
> > * substitutions are implemented as a protocol and a defrecord
> > * substitutions internally use a PersistentHashMap as well as
> > PersistentVector (for debugging)
> > * supports unification of all the Clojure data structures supported by
> > clojure.walk
> > * goal and goal constructors are implements as deftypes (Mzero, Unit,
> > Choice, Inc) and those implement IMPlus and IBind protocols.
> >
> > The code base is compact, some ~450 lines of Clojure.
> >
> > Future directions:
> > * Friendlier interface for defining facts and running queries
> > * There are many great ideas in William Byrd's thesis that need looking
> > into. In particular I'm interested in tabling.
> > * Investigating replacing the PersistentHashMap with a Skew Binary Random
> > Access List or a Finger Tree. This would speed up the performance of the
> > most expensive functions in the system, walk. In the Scheme
> implementations
> > SBRALs can lead to 2.5X-100X in performance.
> > * Modifying the core macros to optimize logic programs.
> > * Parallel logic programming.
> >
> > Source and more info here,https://github.com/swannodette/logos.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com<clojure%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to