Julia has been designed to tackle problems arising in science and statistics. It follows the route of traditional imperative languages. It is not a functional language, such as Haskell
, OCaml
, and Clojure
, but since it incorporates a Scheme interpreter, it is possible to create runtime macros rather than the preprocessor style ones found in C/C++.
Macros are useful in efficiently generating boilerplate code, and we have already made use of the @printf
macro, which emulates the C-style printf()
function.
If a true functional approach is required, the reader is directed to the Lazy.jl
package, which implements lazily evaluated lists plus a library of functions to use them and many well-designed macros. So, to get a grasp of Julia metaprogramming, you could do no better than looking at the source code in the Lazy
package.
To generate macros, a language needs to have the property of homoiconicity. This means that the primary representation of program code is also a data structure...