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. 

> 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

Sam

---
http://sam.aaron.name

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