Now that you have a clear understanding of how macros work and what they are for, let's start working with Clojure.
Let me present you with a challenge: write an unless
function in Clojure, something that works like this:
(def a 150) (my-if (> a 200) (println"Bigger than 200") (println"Smaller than 200"))
Let's give it a first try; maybe with something like the following syntax:
(defn my-if [cond positive negative] (if cond positive negative))
Do you know what would happen if you wrote this code and then ran it? If you test it, you will get the following result:
Bigger than 200 Smaller than 200 Nil
What's happening here? Let's modify it a bit so that we get a value and we can understand what's happening. Let's define it a bit differently, and let's return a value so that we see something different:
(def a 500) (my-if (> a 200) (do (println"Bigger than 200") :bigger) (do (println"Smaller than 200") :smaller))