On Jul 29, 1:49 am, Sam Aaron <samaa...@gmail.com> wrote: > On 29 Jul 2011, at 07:22, Ken Wesson wrote: > > > On Fri, Jul 29, 2011 at 12:49 AM, Jeff Rose <ros...@gmail.com> wrote: > >> I don't think it's very typical to pass a form to a function, unless > >> you plan on using eval at runtime. > > > Or it's a function called by a macro to do some processing of forms. > > Yep, this is precisely what I was considering. I should have explicitly made > mk-dynamically-bound-fn a macro in my example - a miscommunication on my part. > > On 29 Jul 2011, at 02:12, Alan Malloy wrote: > > > > > It's not clear how much of this is relevant to your actual problem, vs > > the simple version you're posting here. > > Sorry, I was just trying to simplify things to try and get directly to the > meat of the problem.
No apologies needed - reducing to a simple case is great. But here, the simplification was probably too severe. > > If you want something more general, that implicitly binds things for > > you based on some code somewhere else (ew ew ew), then you need a > > macro. This implementation is pretty gross; I suspect it could be > > better, but you're trying to do something that seems weird to me. > > > (defn binding-vec [] > > ['size '(count args)]) > > > (defmacro magic-fn > > [& forms] > > `(fn [& ~'args] > > (let ~(binding-vec) > > ~@forms))) > > > user> ((magic-fn (+ size 10)) 1 2) > > 12 > > Very cool, although it's not quite what I'd like. I'd like binding-vec to be > a function of the resulting magic-fn's args. > > I'm aiming for something like this, but can't get it to quite work: > > (defn binding-vec [foos] > '[size (count ~foos)]) > > (defmacro magic-fn > [& forms] > `(fn [& ~'args] > (let ~(binding-vec ~'args) > ~@forms))) > > ((magic-fn (+ size 10)) 1 2) ;=> BOOM (defn binding-vec [foos] ['size `(count ~foos)]) (defmacro magic-fn [& forms] (let [args (gensym 'args)] `(fn [& ~args] (let ~(binding-vec args) ~@forms)))) ((magic-fn (+ size 10)) 1 2) ;=> 12 -- 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