Ambrose,
  Thanks for pointing me to the cKanren branch.

Happy New Year.



On Dec 31, 9:18 pm, Ambrose Bonnaire-Sergeant
<abonnaireserge...@gmail.com> wrote:
> I had a peek on the cKanren branch, distincto is basically all-diffo in
> cKanren.
>
> https://github.com/clojure/core.logic/blob/cKanren/src/main/clojure/c...
>
> Here's the port to core.logic. (change !=c to !=)
>
> (defn distincto [l]
>   (conde
>     [(== l ())]
>     [(fresh [a] (== l [a]))]
>     [(fresh [a ad dd]
>             (== l (llist a ad dd))
>             (!= a ad)
>             (distincto (llist a dd))
>             (distincto (llist ad dd)))]))
>
> (run* [q]
>       (fresh [a b c]
>              (membero a [1 2 3])
>              (membero c [1 2 3])
>              (== b 2)
>              (distincto [a b c])
>              (== q [a b c])))
> ;=> ([1 2 3] [3 2 1])
>
> Pretty cool!
>
> Thanks,
> Ambrose
>
>
>
>
>
>
>
> On Sun, Jan 1, 2012 at 4:31 AM, cej38 <junkerme...@gmail.com> wrote:
> > I am trying to learn how to use core.logic.  Here is a toy problem
> > that I am thinking about.
>
> > (run* [q]
> >  (fresh [a b c]
> >    (membero a [1 2 3])
> >    (membero c [1 2 3])
> >    (== b 2)
> >    (!= a b)
> >    (!= a c)
> >    (!= b c)
> >    (== q [a b c])))
>
> >  I would like to create a function that replaces the three != lines,
> > something like, (distincto [a b c]) such that I could rewrite the
> > above problem as
>
> > (run* [q]
> >  (fresh [a b c]
> >    (membero a [1 2 3])
> >    (membero c [1 2 3])
> >    (== b 2)
> >    (distincto [a b c])
> >    (== q [a b c])))
>
> > I tried to write several functions but they are all end up inside some
> > variant of a col, [(!= a b)(!= a c)(!= b c)].  Thus, I either need
> > someone to help me figure out how do write the distincto function, or
> > what to call on [(!= a b)(!= a c)(!= b c)] to get it to work.
>
> > --
> > 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

-- 
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