I've thought about that actually. And it wouldn't work.

So (defn destructure [form value]
       ...magic...)

(defmacro let [forms body]
  `(let* ~(vec (destructure forms body))  <- at this point, "body" is
not known yet. It's just a symbol.
     ~@body)

This approach won't work because "body" is only a symbol within the
macro. We don't know it's value until runtime.

  -Patrick



On Feb 7, 7:01 pm, Alan <a...@malloys.org> wrote:
> (defn destructure [binding-form]
>   ...magic...)
>
> (defmacro let [forms body]
>   `(let* ~(vec (destructure forms))
>      ~@body))
>
> On Feb 7, 1:46 pm, CuppoJava <patrickli_2...@hotmail.com> wrote:
>
>
>
> > Actually that would be fine as a solution as well. I'm stumped as to
> > how to avoid repeating the same thing twice (once in function world
> > and once in macro world).
>
> > ie. Let's assume that we have this destructuring function. How do we
> > use that do program a destructuring let macro?
>
> >   -Patrick
>
> > On Feb 7, 3:32 pm, Ken Wesson <kwess...@gmail.com> wrote:
>
> > > On Mon, Feb 7, 2011 at 3:01 PM, Meikel Brandmeyer <m...@kotka.de> wrote:
> > > > Hi,
>
> > > > Am 07.02.2011 um 20:51 schrieb CuppoJava:
>
> > > >> Thanks for your answer Meikel.
>
> > > >> Your answer isn't that ugly. It's very similar to what I have as
> > > >> well.
>
> > > >> I would like to know if you think it's possible to re-use "let" to do
> > > >> this. I feel like I'm re-inventing the wheel somewhat.
>
> > > > I don't think you can use let without resorting to macros since let 
> > > > itself is one. Once in macro, always in macro world.
>
> > > > As fogus said: you could copy the logic from c.c/destructure and make 
> > > > it do the calls instead of emitting code. But I don't think there is a 
> > > > pre-fabricated function doing that.
>
> > > Arguably there should be, with the let macro calling it to do the
> > > heavy lifting but also available for direct user use.

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