sorry .. I was too quick in responding .. You are talking about something
else..
Sunil.

On Thu, Jan 20, 2011 at 6:40 PM, Sunil S Nandihalli <
sunil.nandiha...@gmail.com> wrote:

> one of the following should give you a reasonable solution
> http://clojuredocs.org/clojure_contrib/clojure.contrib.seq/indexed
>  <http://clojuredocs.org/clojure_contrib/clojure.contrib.seq/indexed>
> http://clojuredocs.org/clojure_core/clojure.core/map-indexed
>
> <http://clojuredocs.org/clojure_core/clojure.core/map-indexed>Sunil.
>
> On Thu, Jan 20, 2011 at 6:36 PM, kony <kulakow...@gmail.com> wrote:
>
>> Hi,
>>
>> I am looking for something which operates similarly as doseq but in
>> case of more than one binding traverses every sequence only one. I.e.
>>
>> wanted result:
>>
>> (doseq [x '(A B C) y '(1 2 3)] (println (list x y)))
>>
>> should produce:
>>
>> (A 1)
>> (B 2)
>> (C 3)
>>
>> OK I know that in this particular case there are some shorthands like
>> using
>>
>> (doseq [x (indexed '(A B C))] (println (list (second x) (inc (first
>> x)) )))
>>
>> but I am looking for something general.
>>
>> Be honest I am starting to write a macros:
>>
>> (defmacro foreach [bind-vect expr]
>>        `(if  (< 0 (count ~(second bind-vect)))
>>                (loop [~(symbol (first bind-vect)) (first ~(second
>> bind-vect)) proc#
>> (rest ~(second bind-vect))]
>>        (do
>>                ~expr
>>                      (if (< 0 (count proc#))
>>                                (recur (first proc#) (next proc#)))))))
>>
>> and for two bindig pairs
>>
>> (defmacro foreach2 [bind-vect expr]
>>        `(if  (< 0 (count ~(second bind-vect)))
>>                (loop [~(symbol (nth bind-vect 0)) (first ~(nth bind-vect
>> 1))
>>                                          coll1# (rest ~(nth bind-vect 1))
>>                                          ~(symbol (nth bind-vect 2))
>> (first ~(nth bind-vect 3))
>>                                          coll2#  (rest ~(nth bind-vect
>> 3))]
>>                        (do
>>                                        ~expr
>>                                        (if (< 0 (count coll1#))
>>                                                (recur (first coll1#) (next
>> coll1#) (first coll2#) (next
>> coll2#)))))))
>>
>> but I am not sure whether this is a good solution?
>>
>>  On the other hand do you have an idea how to make foreach2 macro more
>> general, handling any length of binding vector?
>>
>> --
>> 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<clojure%2bunsubscr...@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