I can do this with core.logic (yes, I know that match-list isn't doing
anything much here)

(defn match-list [member list]
  (membero member list))


(run* [q]
      (match-list 10 [1 10 100])
      (== q "worked"))

For q to come back with any values then 10 has to be part of the list [1
10 100].

I want to do the same thing where the second argument is a list of
lists. So something like:

(defn match-lists [member lists]
  (map
   (fn [l] (membero member l))
   lists))

(run* [q]
      (match-lists 10
                   [[1 10 100]
                    [1 10 100]])
      (== q "worked"))

which should also return "worked". The point is that I don't know how
many "membero" forms I need at compile time, only at runtime. My initial
attempt above fails.

java.lang.ClassCastException: clojure.lang.LazySeq cannot be cast to 
clojure.lang.IFn
 at clojure.core.logic.Substitutions.bind (logic.clj:410)
    logic_expts.what_i_want$eval7021$fn__7022$fn__7023$_inc__7024.invoke 
(form-init238773086654203315.clj:2)
    clojure.core.logic$eval5780$fn__5781$fn__5782.invoke
    (logic.clj:1109)


Is there a way to do this with functions -- or do I need to macro it?

Phil

-- 
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 unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to