I don't see there's a way to eliminate out most parenthesis like this 
either. Maybe you can try to spit them out to somewhere and then read them 
back again...but you probably don't want to do this. ;-)

在 2012年8月21日星期二UTC+8下午11时00分31秒,Maris写道:
>
>
> Nothing is wrong with do block.    I just thought maybe there is some 
> trick....
>
> Fair enough.
>
>
> On Tuesday, 21 August 2012 15:55:04 UTC+1, lpetit wrote:
>>
>> Hello, 
>>
>> What's wrong with having 2 fns inside the top level do ?
>>
>> In Clojure, top level dos are split so that their children forms are 
>> evaluated in sequence, as if you would have written them without the do.
>>
>> HTH,
>>
>> -- 
>> Laurent
>>
>> 2012/8/21 Maris <maris.o...@gmail.com>
>>
>>> I want a macro that generates two defn's.
>>>
>>> (defn vote-suspend [this] (deref (.state this)))
>>> (defn vote-resume [this state] (reset! (.state this) state))
>>>
>>> I have written this:
>>>
>>> (defmacro suspendable [prefix]
>>>   `(do (defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state 
>>> ~'this)))
>>>        (defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! 
>>> (.state ~'this) ~'state))))
>>>
>>> It works but it has both defn's in *do *block*.*
>>>
>>> (*do* (clojure.core/defn vote-suspend [this] (clojure.core/deref 
>>> (.state this))) (clojure.core/defn vote-resume [this state] 
>>> (clojure.core/reset! (.state this) state)))
>>>
>>>
>>> is it possible to generate defn's without *do* ?
>>>
>>>
>>> I tried this:
>>>
>>> (defmacro suspendable [prefix]
>>>   (list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref (.state 
>>> ~'this)))
>>>         `(defn ~(symbol (str prefix "resume")) [~'this ~'state] (reset! 
>>> (.state ~'this) ~'state))))
>>>
>>> But it creates parentheses around defn:
>>>
>>> user>  (macroexpand-1  '(suspendable vote-))
>>> ((clojure.core/defn vote-suspend [this] (clojure.core/deref (.state 
>>> this))) (clojure.core/defn vote-resume [this state] (clojure.core/reset! 
>>> (.state this) state)))
>>>
>>>
>>> Maybe splice it?
>>>
>>> (defmacro suspendable [prefix]
>>>   ~@(list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref 
>>> (.state ~'this)))
>>>           `(defn ~(symbol (str prefix "resume")) [~'this ~'state] 
>>> (reset! (.state ~'this) ~'state))))
>>>
>>> *Attempting to call unbound fn: #'clojure.core/unquote-splicing*      
>>>
>>> *unquote-splicing* must be inside syntax-quote block, right ?    
>>>
>>> This creates parentheses again:
>>>
>>> (defmacro suspendable [prefix]
>>>   `( ~@(list `(defn ~(symbol (str prefix "suspend")) [~'this] (deref 
>>> (.state ~'this)))
>>>             `(defn ~(symbol (str prefix "resume")) [~'this ~'state] 
>>> (reset! (.state ~'this) ~'state)))))
>>>
>>> Is it not possible to return two sexp's from a macro ?
>>>
>>> -- 
>>> You received this message because you are subscribed to the Google
>>> Groups "Clojure" group.
>>> To post to this group, send email to clo...@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+u...@googlegroups.com
>>> 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 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