On Sat, Feb 21, 2009 at 8:53 PM, André Thieme
<[email protected]> wrote:
>
> On 21 Feb., 18:24, Mark Volkmann <[email protected]> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---