I'm embarrassed to say how many more scotches it took to come up with: (defn satisfes-requirements-o [required given] > (fresh [e] > (appendo required e given))) >
On Friday, May 25, 2012 6:35:09 PM UTC-7, Mark wrote: > > Two scotches later, I came up with > >> (defn satisfes-requirements-o [required given] >> (fresh [e r s] >> (membero e given) >> (conso e r s) >> (== s required))) >> > > and it seems to do the trick. I'm not sure about leaving r unbound but my > tests pass. I'd love some feedback on the approach. > > On Friday, May 25, 2012 4:58:14 PM UTC-7, Mark wrote: >> >> I confess that the last time I cracked open a Prolog book was lo these >> many years ago in college and that I need to re-read The Art but I'm hoping >> that someone can point out how I'm thinking about this problem wrongly: >> I'd like to write a goal that succeeds when given a set of required items >> and a set of supplied items, the supplied items is a proper superset of the >> required items. My intuition is that I want a goal that succeeds and >> 'returns' the common subset of the two sets and then another goal that >> tries to unify the subset with the required items: >> >>> (defn satisfes-requirements-o [required given] >>> (let [subset (run* [q] >>> (membero q required) >>> (membero q given))] >>> (== subset required))) >>> >> >> I'm basically treating the subset operation as a subrouting and using >> run* to aggregate the common elements. This feels wrong and it feels like >> I should use something less procedural but I can't wrap my brain around how >> else to approach the problem. Suggestions? Hints? >> >> Thanks >> > -- 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