diff --git a/README.md b/README.md index 678bbdc..b01a0c1 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ smart people at [Hashrocket](http://hashrocket.com/). ### clojure +- [Expanding Macros](clojure/expanding-macros.md) - [Quick Clojure Docs](clojure/quick-clojure-docs.md) - [Specify the Directory of a Shell Command](clojure/specify-the-directory-of-a-shell-command.md) - [Splitting On Whitespace](clojure/splitting-on-whitespace.md) diff --git a/clojure/expanding-macros.md b/clojure/expanding-macros.md new file mode 100644 index 0000000..12c3fde --- /dev/null +++ b/clojure/expanding-macros.md @@ -0,0 +1,24 @@ +# Expanding Macros + +Macros are an important part of Clojure's syntax. They allow you to write +cleaner, terser, more expressive code. +Though sometimes you may want to inspect the +clojure code that is actually produced by a particular macro. The +`macroexpand` function allows for just this. + +For instance, if you have a snippet of code using the `->>` operator: + +```clojure +(->> 4 (+ 1) (- 2) (* 3)) +``` + +You can wrap that form with the `macroexpand` function to see the form that +is ultimately evaluated: + +```clojure +> (macroexpand (->> 4 (+ 1) (- 2) (* 3))) +; (* 3 (- 2 (+ 1 4))) +``` + +It doesn't buy us much in a contrived example like this, but can prove +useful for better understanding clojure and the more complex code we write.