Re: I created a new macro if-let-all

2015-06-09 Thread crocket
Where does if-let-all serve people best? Can anyone help me find the right 
clojure project to contribute to?

On Friday, June 5, 2015 at 2:44:22 PM UTC+9, crocket wrote:

 The macro below is called if-let-all.

 (defmacro if-let-all
   if-let-all evaluates every local binding sequentially and evaluates 
 true-case only if every local binding is a truthy value.
 true-case has access to all local bindings, but false-case doesn't have 
 access to local bindings.
   [bindings true-case false-case]
   (let [pairs (partition 2 bindings)
 names (mapv first pairs)
 exprs (map second pairs)
 exprs-in-if-let (fn self [[name1  more-names] [expr1  more-exprs]]
  `(if-let [~name1 ~expr1]
 ~(if more-names
(self more-names more-exprs)
names)))
 things (exprs-in-if-let names exprs)]
 `(if-let [~names ~things]
~true-case
~false-case)))

 You can use it as (if-let-all [a 2 b 3] (+ a b) oh no!!). false-case 
 doesn't have access to local bindings.



-- 
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/d/optout.


Re: I created a new macro if-let-all

2015-06-06 Thread crocket
Yes, if-and-let is similar to if-let-all.

On Friday, June 5, 2015 at 10:47:24 PM UTC+9, Fluid Dynamics wrote:

 On Friday, June 5, 2015 at 1:53:07 AM UTC-4, crocket wrote:

 Ouch, I didn't write. Gary Fredericks wrote it. I simply modified his 
 if-let-all macro a little bit.

 On Friday, June 5, 2015 at 2:44:22 PM UTC+9, crocket wrote:

 The macro below is called if-let-all.

 (defmacro if-let-all
   if-let-all evaluates every local binding sequentially and evaluates 
 true-case only if every local binding is a truthy value.
 true-case has access to all local bindings, but false-case doesn't have 
 access to local bindings.
   [bindings true-case false-case]
   (let [pairs (partition 2 bindings)
 names (mapv first pairs)
 exprs (map second pairs)
 exprs-in-if-let (fn self [[name1  more-names] [expr1  more-exprs]]
  `(if-let [~name1 ~expr1]
 ~(if more-names
(self more-names more-exprs)
names)))
 things (exprs-in-if-let names exprs)]
 `(if-let [~names ~things]
~true-case
~false-case)))

 You can use it as (if-let-all [a 2 b 3] (+ a b) oh no!!). false-case 
 doesn't have access to local bindings.


 Didn't I post something with a similar purpose a while back, called 
 if-and-let? That one had some trickiness to avoid unexpectedly shadowing 
 things unpredictably in false-case, as I recall. 


-- 
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/d/optout.


Re: I created a new macro if-let-all

2015-06-05 Thread Fluid Dynamics
On Friday, June 5, 2015 at 1:53:07 AM UTC-4, crocket wrote:

 Ouch, I didn't write. Gary Fredericks wrote it. I simply modified his 
 if-let-all macro a little bit.

 On Friday, June 5, 2015 at 2:44:22 PM UTC+9, crocket wrote:

 The macro below is called if-let-all.

 (defmacro if-let-all
   if-let-all evaluates every local binding sequentially and evaluates 
 true-case only if every local binding is a truthy value.
 true-case has access to all local bindings, but false-case doesn't have 
 access to local bindings.
   [bindings true-case false-case]
   (let [pairs (partition 2 bindings)
 names (mapv first pairs)
 exprs (map second pairs)
 exprs-in-if-let (fn self [[name1  more-names] [expr1  more-exprs]]
  `(if-let [~name1 ~expr1]
 ~(if more-names
(self more-names more-exprs)
names)))
 things (exprs-in-if-let names exprs)]
 `(if-let [~names ~things]
~true-case
~false-case)))

 You can use it as (if-let-all [a 2 b 3] (+ a b) oh no!!). false-case 
 doesn't have access to local bindings.


Didn't I post something with a similar purpose a while back, called 
if-and-let? That one had some trickiness to avoid unexpectedly shadowing 
things unpredictably in false-case, as I recall. 

-- 
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/d/optout.


I created a new macro if-let-all

2015-06-04 Thread crocket


The macro below is called if-let-all.

(defmacro if-let-all
  if-let-all evaluates every local binding sequentially and evaluates 
true-case only if every local binding is a truthy value.
true-case has access to all local bindings, but false-case doesn't have access 
to local bindings.
  [bindings true-case false-case]
  (let [pairs (partition 2 bindings)
names (mapv first pairs)
exprs (map second pairs)
exprs-in-if-let (fn self [[name1  more-names] [expr1  more-exprs]]
 `(if-let [~name1 ~expr1]
~(if more-names
   (self more-names more-exprs)
   names)))
things (exprs-in-if-let names exprs)]
`(if-let [~names ~things]
   ~true-case
   ~false-case)))

You can use it as (if-let-all [a 2 b 3] (+ a b) oh no!!). false-case doesn't 
have access to local bindings.

-- 
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/d/optout.


Re: I created a new macro if-let-all

2015-06-04 Thread crocket
Ouch, I didn't write. Gary Fredericks wrote it. I simply modified his 
if-let-all macro a little bit.

On Friday, June 5, 2015 at 2:44:22 PM UTC+9, crocket wrote:

 The macro below is called if-let-all.

 (defmacro if-let-all
   if-let-all evaluates every local binding sequentially and evaluates 
 true-case only if every local binding is a truthy value.
 true-case has access to all local bindings, but false-case doesn't have 
 access to local bindings.
   [bindings true-case false-case]
   (let [pairs (partition 2 bindings)
 names (mapv first pairs)
 exprs (map second pairs)
 exprs-in-if-let (fn self [[name1  more-names] [expr1  more-exprs]]
  `(if-let [~name1 ~expr1]
 ~(if more-names
(self more-names more-exprs)
names)))
 things (exprs-in-if-let names exprs)]
 `(if-let [~names ~things]
~true-case
~false-case)))

 You can use it as (if-let-all [a 2 b 3] (+ a b) oh no!!). false-case 
 doesn't have access to local bindings.



-- 
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/d/optout.