On Sat, Feb 21, 2009 at 8:53 PM, André Thieme <splendidl...@googlemail.com> wrote: > > On 21 Feb., 18:24, Mark Volkmann <r.mark.volkm...@gmail.com> wrote: >> Currently the dotimes macro requires its first argument to be a vector >> for binding a variable to the number of times the body should be >> executed. Inside the body, that variable is bound to the values from 0 >> to that number minus 1. How about changing this macro to also accept >> an integer as the first argument instead of a binding vector for cases >> where the number isn't needed in the body. > > I don't find this very interesting. > There several variants of how dotimes could be, but the one that we > currently have is the one that is used since a few decades in Lisp, > and it is the one that makes very much sense. > >> For example, >> >> (print "Santa says") >> (dotimes 3 (print "Ho")) >> (.flush *out*) > > (print "Santa saysHoHoHo") > > How often do you really want to repeat the same side effect many times > in a row? > Why does it hurt to just say (dotimes [i 100] ...)? > This will not reduce readability dramatically, but is a consistant > use of dotimes. It also does not reduce productivity. > Why make a breaking change for this?
Why do you say it would be a breaking change? I just got the following to work with minimal changes to the dotimes macro. (dotimes 3 (println "Ho")) (dotimes [n 4] (println n)) So both forms work with a single macro definition. Here's what I did. 1) Wrap the body of the macro inside the following: (let [new-bindings (if (integer? bindings) ['n bindings] bindings)] ... ) This creates the required binding when only an integer is passed and using the supplied value for bindings otherwise. 2) Change every occurrence of "bindings" in the body to "new-bindings". 3) Move the (defmacro dotimes ... ) to just before (defn make-array ...). That's the first time it's used in core.clj and it will not be after the definition of "integer?". Is there a reason to not make this change? -- R. Mark Volkmann Object Computing, Inc. --~--~---------~--~----~------------~-------~--~----~ 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 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 -~----------~----~----~----~------~----~------~--~---