Search code examples
clojurequil

How to do a for-loop in Clojure?


I'm learning myself some Clojure and I'm using Quil. I would like to know how to translate a for-loop into Clojure:

This is how I would do it in Java or similar languages:

for ( int i = 0; i < numSides; i++ ) {
    float posX = cos( theta * i );
    float posY = sin( theta * i );
    ellipse( posX, posY, polySize, polySize );
}

My Clojure attempt:

  (let [theta (/ PI num-sides)
        angle (range 0 num-sides)
        pos-x (cos (* theta angle))
        pos-y (sin (* theta angle))]
    (dorun (map #(ellipse % % % %) pos-x pos-y poly-size poly-size)))

Solution

  • All the ways that you have looked for are basically to work with sequences where as a loop is about executing things for a specific number of times. Clojure provide dotimes to do things for certain number of times:

    (dotimes [i 10]
      (println i))
    

    So your code becomes something like:

     (dotimes [i num-sides]
       (let [pos-x (cos (* theta i))
             pos-y (sin (* theta i))]
             (ellipse pos-x pos-y poly-size poly-size)))