Clojure's Most Procedural Loop: doseq
Before we get started with recursion, let's take a look at the doseq
macro. It is arguably the most procedural of Clojure's looping alternatives. At least, it looks a lot like the foreach
loop found in other languages. Here's a very simple use of doseq
:
user> (doseq [n (range 5)] (println (str "Line " n))) Line 0 Line 1 Line 2 Line 3 Line 4 nil
Translated into English, we might say: "For each integer from 0 to 5, print out a string with the word 'Line' and the integer." You might ask: "What is that nil doing there?" Good question. doseq
always returns nil
. In other words, doseq
doesn't collect anything. The sole purpose of doseq
is to perform side effects, such as printing to the REPL, which is what println
does here. The strings that appear in your REPL—Line 0
, Line 1
, and so on—are not returned values; they are side effects.
Note...