d'oh! Answering my own question: Just compose the unify functions a la (unify (unify a v1 (:v1 r) v2 (:v2 r))
I have a feeling there is a library function/macro that would make this less messy but I can't find it from the cheatsheet. On Saturday, November 16, 2013 10:31:50 AM UTC-8, Mark wrote: > > I stumbled across Timothy Baldridge's excellent video > <http://www.youtube.com/watch?v=HHZ8iqswiCw>explaining how to incorporate > data sources into core.logic. It reinvigorated my interest in using > core.logic to query SQL RDBMS. I'm stumbling on a pretty simple thing, I > think. I've got a table that has three columns, a single primary key > column and two value columns. Using the pattern Tim outlines in his video, > I've got a relation function that takes three parameters, one for each > column and I'm trying to work through the case where the primary key is > ground and the value columns are lvars. This translates to a query of the > form SELECT v1, v2 FROM t WHERE pkey=?. Of course, this returns two values > that must be unified. That's where I'm stuck. > > I know I want to return a substitution map, but I have two lvars to > unify. How do I merge the two substitution maps? > > Sample code: > (defn pkey-v1-v2-o [pkey v1 v2] > (fn [a] > (let [pkey (walk a pkey) > v1 (walk a v1) > v2(walk a v2)] > (condp = [(not (lvar? pkey)) > (not (lvar? v1)) > (not (lvar? v2))] > [true false false ] (to-stream > (let [r (first (query ["SELECT v1, v2 FROM T > WHERE pkey=?" pkey]))] > (some-merge-fn (unify a v1 (:v1 r)) > (unify a v2 (:v2 r))))))))) > -- -- 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/groups/opt_out.