# Homoiconicity: Code as Data in Lisp Macros

DevFeed: [Homoiconicity: Code as Data in Lisp Macros](<https://devfeed.tech/articles/just-what-does-code-as-data-mean-anyway-32173.md>)

Original publisher: [Read original article](<https://adambard.com/blog/what-is-homoiconicity/>)

Published: 2014-01-19T00:00:00Z

Content type: tutorial

Language: en

Sources: [Adam Bard](<https://devfeed.tech/sources/adam-bard.md>)

Topics: [Lisp](<https://devfeed.tech/topics/lisp.md>), [syntax](<https://devfeed.tech/topics/syntax.md>), [Clojure](<https://devfeed.tech/topics/clojure.md>)

Tags: [lisp](<https://devfeed.tech/tags/lisp.md>), [macros](<https://devfeed.tech/tags/macros.md>), [metaprogramming](<https://devfeed.tech/tags/metaprogramming.md>)

## AI overview

An introductory explanation of homoiconicity in Lisp-family languages. It contrasts Lisp macros, which manipulate abstract syntax trees as values, with C-style string substitution and uses a macro example to show how code can generate code.

## Source excerpt

Recently, I've seen popular articles on macros and metaprogramming in Nimrod and Elixir. Both of these are wonderful metaprogramming systems, to be sure, but I couldn't help but imagine some in the audience smirking inwardly - and occasionally less inwardly. What odd syntax! How out-of-place they are! If only there existed a homiconic language, they think sarcastically, that could eliminate the need for awkward and forced syntax. Of course, these smug bastards are users of any of the LISP family of languages.