Re: why not apply-macro

2014-02-25 Thread 刘家财
Hi James,
I really appreciate your code,it really help me much.
just a little modification:

(defn batchly-redis [cmd params]
  (doseq [p params]
(apply cmd p)))

doseq requires an even number of args

在 2014年2月25日星期二UTC+8下午6时33分48秒,James Reeves写道:
>
> You could just write it as a function and leave out wcar*.
>
> (defn batchly-redis [cmd params]
>   (doseq [params]
> (apply cmd params)))
>
> Then to execute:
>
> (wcar* (batchly-redis cat/set parameters))
>
> As far as I can tell, wcar is just a container macro, like with-open, in 
> that it initiates the connection and then cleans up after itself. Within 
> wcar, you can execute functions in whatever way you want.
>
> - James
>
>
> On 25 February 2014 09:00, 刘家财 > wrote:
>
>> hi JW,
>> First thank you for your reply.
>> my origin question is somethine about redis.here i refer 
>> https://github.com/ptaoussanis/carmine 
>> I follow this two line
>>  (def server1-conn {:pool {} :spec {}}) ; See `wcar` 
>> docstring for opts
>>
>> (defmacro wcar* [& body] `(car/wcar server1-conn ~@body))
>>
>> then I can exec some redis commands,but I want to exec commands dynamicly.
>> for example I here a vector [["foo" "bar"]["hello" "world"]]
>> i want to exec following commands
>> (wcar* (car/set "foo" "bar") (car/set "hello" "world"))
>> so i have write a macro like this
>>
>> (defmacro batchly-redis [cmd params] 
>>   (let [car-fns (map #(cons cmd %) params)]
>> `(wcar* ~@car-fns)))
>>
>>
>> then I can invoke this macro using this way
>> (batchly-redis cat/set [["foo" "bar"]["hello" "world"]])
>> in this way,my macro works ok.but here my vector is coming from the 
>> return of other fn ,so as you said above,this will not work, because marco 
>> evaluates args at compile time.Do your have some ideas on my problem.
>> Really thanks
>>
>>
>> 在 2014年2月24日星期一UTC+8下午6时29分09秒,Jozef Wagner写道:
>>>
>>> Well the evil thing is that apply-macro evaluates arguments at compile 
>>> time. Example where this won't work follows
>>>
>>> (defn foo [numbers]
>>>   (apply-macro + numbers))
>>>
>>> JW
>>>
>>>
>>> On Mon, Feb 24, 2014 at 10:27 AM, 刘家财  wrote:
>>>
 I have one problem using Clojure
 we all know there is a apply for a fn to prepend intervening arguments 
 to args. 
 such as (apply + [2 3]) will equals to (+ 2 3)
 this is really handy,
 BUT,this is no apply-macro fn to use,I find a contrib(
 https://github.com/clojure/clojure-contrib/blob/
 73accf597eafb8dfcb642702a3b98b057bbdbbdf/src/main/clojure/
 clojure/contrib/apply_macro.clj#L34) which has somethine like this,but 
 deprecated.
 and says it is evil,I can't understand why the docs says it was evil?
 Is there anything harmful? Can someone show me some examples?
 Thank U


  -- 
 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 unsubscribe from this group and stop receiving emails from it, send 
 an email to clojure+u...@googlegroups.com.

 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 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 unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com .
>> 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 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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_ou

Re: why not apply-macro

2014-02-25 Thread James Reeves
You could just write it as a function and leave out wcar*.

(defn batchly-redis [cmd params]
  (doseq [params]
(apply cmd params)))

Then to execute:

(wcar* (batchly-redis cat/set parameters))

As far as I can tell, wcar is just a container macro, like with-open, in
that it initiates the connection and then cleans up after itself. Within
wcar, you can execute functions in whatever way you want.

- James


On 25 February 2014 09:00, 刘家财  wrote:

> hi JW,
> First thank you for your reply.
> my origin question is somethine about redis.here i refer
> https://github.com/ptaoussanis/carmine
> I follow this two line
>  (def server1-conn {:pool {} :spec {}}) ; See `wcar`
> docstring for opts
>
> (defmacro wcar* [& body] `(car/wcar server1-conn ~@body))
>
> then I can exec some redis commands,but I want to exec commands dynamicly.
> for example I here a vector [["foo" "bar"]["hello" "world"]]
> i want to exec following commands
> (wcar* (car/set "foo" "bar") (car/set "hello" "world"))
> so i have write a macro like this
>
> (defmacro batchly-redis [cmd params]
>   (let [car-fns (map #(cons cmd %) params)]
> `(wcar* ~@car-fns)))
>
>
> then I can invoke this macro using this way
> (batchly-redis cat/set [["foo" "bar"]["hello" "world"]])
> in this way,my macro works ok.but here my vector is coming from the return
> of other fn ,so as you said above,this will not work, because marco
> evaluates args at compile time.Do your have some ideas on my problem.
> Really thanks
>
>
> 在 2014年2月24日星期一UTC+8下午6时29分09秒,Jozef Wagner写道:
>>
>> Well the evil thing is that apply-macro evaluates arguments at compile
>> time. Example where this won't work follows
>>
>> (defn foo [numbers]
>>   (apply-macro + numbers))
>>
>> JW
>>
>>
>> On Mon, Feb 24, 2014 at 10:27 AM, 刘家财  wrote:
>>
>>> I have one problem using Clojure
>>> we all know there is a apply for a fn to prepend intervening arguments
>>> to args.
>>> such as (apply + [2 3]) will equals to (+ 2 3)
>>> this is really handy,
>>> BUT,this is no apply-macro fn to use,I find a contrib(
>>> https://github.com/clojure/clojure-contrib/blob/
>>> 73accf597eafb8dfcb642702a3b98b057bbdbbdf/src/main/clojure/
>>> clojure/contrib/apply_macro.clj#L34) which has somethine like this,but
>>> deprecated.
>>> and says it is evil,I can't understand why the docs says it was evil?
>>> Is there anything harmful? Can someone show me some examples?
>>> Thank U
>>>
>>>
>>>  --
>>> 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 unsubscribe from this group and stop receiving emails from it, send
>>> an email to clojure+u...@googlegroups.com.
>>>
>>> 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 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
> ---
> 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 clojure+unsubscr...@googlegroups.com.
> 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 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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: why not apply-macro

2014-02-25 Thread 刘家财
hi JW,
First thank you for your reply.
my origin question is somethine about redis.here i refer 
https://github.com/ptaoussanis/carmine 
I follow this two line
 (def server1-conn {:pool {} :spec {}}) ; See `wcar` docstring 
for opts

(defmacro wcar* [& body] `(car/wcar server1-conn ~@body))

then I can exec some redis commands,but I want to exec commands dynamicly.
for example I here a vector [["foo" "bar"]["hello" "world"]]
i want to exec following commands
(wcar* (car/set "foo" "bar") (car/set "hello" "world"))
so i have write a macro like this

(defmacro batchly-redis [cmd params] 
  (let [car-fns (map #(cons cmd %) params)]
`(wcar* ~@car-fns)))


then I can invoke this macro using this way
(batchly-redis cat/set [["foo" "bar"]["hello" "world"]])
in this way,my macro works ok.but here my vector is coming from the return 
of other fn ,so as you said above,this will not work, because marco 
evaluates args at compile time.Do your have some ideas on my problem.
Really thanks


在 2014年2月24日星期一UTC+8下午6时29分09秒,Jozef Wagner写道:
>
> Well the evil thing is that apply-macro evaluates arguments at compile 
> time. Example where this won't work follows
>
> (defn foo [numbers]
>   (apply-macro + numbers))
>
> JW
>
>
> On Mon, Feb 24, 2014 at 10:27 AM, 刘家财 >wrote:
>
>> I have one problem using Clojure
>> we all know there is a apply for a fn to prepend intervening arguments to 
>> args. 
>> such as (apply + [2 3]) will equals to (+ 2 3)
>> this is really handy,
>> BUT,this is no apply-macro fn to use,I find a contrib(
>> https://github.com/clojure/clojure-contrib/blob/73accf597eafb8dfcb642702a3b98b057bbdbbdf/src/main/clojure/clojure/contrib/apply_macro.clj#L34)
>>  
>> which has somethine like this,but deprecated.
>> and says it is evil,I can't understand why the docs says it was evil?
>> Is there anything harmful? Can someone show me some examples?
>> Thank U
>>
>>
>>  -- 
>> 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 unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com .
>> 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 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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: why not apply-macro

2014-02-24 Thread Jozef Wagner
Well the evil thing is that apply-macro evaluates arguments at compile
time. Example where this won't work follows

(defn foo [numbers]
  (apply-macro + numbers))

JW


On Mon, Feb 24, 2014 at 10:27 AM, 刘家财  wrote:

> I have one problem using Clojure
> we all know there is a apply for a fn to prepend intervening arguments to
> args.
> such as (apply + [2 3]) will equals to (+ 2 3)
> this is really handy,
> BUT,this is no apply-macro fn to use,I find a contrib(
> https://github.com/clojure/clojure-contrib/blob/73accf597eafb8dfcb642702a3b98b057bbdbbdf/src/main/clojure/clojure/contrib/apply_macro.clj#L34)
> which has somethine like this,but deprecated.
> and says it is evil,I can't understand why the docs says it was evil?
> Is there anything harmful? Can someone show me some examples?
> Thank U
>
>
>  --
> 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
> ---
> 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 clojure+unsubscr...@googlegroups.com.
> 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 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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


why not apply-macro

2014-02-24 Thread 刘家财
I have one problem using Clojure
we all know there is a apply for a fn to prepend intervening arguments to 
args. 
such as (apply + [2 3]) will equals to (+ 2 3)
this is really handy,
BUT,this is no apply-macro fn to use,I find a contrib(
https://github.com/clojure/clojure-contrib/blob/73accf597eafb8dfcb642702a3b98b057bbdbbdf/src/main/clojure/clojure/contrib/apply_macro.clj#L34)
 
which has somethine like this,but deprecated.
and says it is evil,I can't understand why the docs says it was evil?
Is there anything harmful? Can someone show me some examples?
Thank U


-- 
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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.