I tried this. But couldn't achieve what I wanted. Below is the macro I
wrote by utilizing macro let
(defmacro ffff [body]
(let [x (gensym 'tu)
defpop-decl
(list 'defpop [] x)]
`(macrolet [~defpop-decl]
(defn execute [~x] ~body))))
I wanted macro to work like following.
(ffff (let [x 10] (+ x (defpop))))
This should generate function like
(defn execute [tu3455] (let [x 10] (+ x tu3455)))
But above macro complain saying "CompilerException
java.lang.RuntimeException: Unable to resolve symbol: tu3455 in this
context.
Looks like I am doing something wrong or I am not understanding how clojure
read, evaluation and macros work.
Please let me know if anyone know way to achieve what I want using macros
and macrolet.
Thanks
Milinda
On Tuesday, March 4, 2014 2:28:06 PM UTC-5, milinda wrote:
>
> Thanks Jason. I'll try this.
>
> Milinda
>
> On Tuesday, March 4, 2014 1:35:39 PM UTC-5, Jason Felice wrote:
>>
>> Can you use macrolet from here: https://github.com/clojure/tools.macro ?
>>
>>
>> On Tue, Mar 4, 2014 at 11:30 AM, milinda <[email protected]> wrote:
>>
>>> I wanted to achive following inside a macro. Lets say I have a macro
>>> called deffilter which can use in following manner.
>>>
>>> (deffilter split-sentence ["sentence"] ["word"]
>>> (work {}
>>> (let [tuple (pop)
>>> words (s/split (value-at tuple 0) " ")]
>>> (doseq [w words]
>>> (push [w] :anchor tuple)))))
>>>
>>> I need to transform above work section to something looks like following.
>>>
>>> (work [tuple1234]
>>> (let [tuple tuple1234
>>> words (s/split (value-at tuple 0) " ")]
>>> (doseq [w words]
>>> (push [w] :anchor tuple))))
>>>
>>> (pop) should be replaced by tuple1234 like string which is same as
>>> parameter to work function.
>>>
>>> Really appriciate if someone can point me a way to achieve this. I am
>>> not sure having pop as another macro is viable because I need to use the
>>> same name as input parameter to work function.
>>>
>>> Thanks
>>> Milinda
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to [email protected]
>>> Note that posts from new members are moderated - please be patient with
>>> your first post.
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 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 [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/groups/opt_out.