Today I googled for “code as data”. The first hit that came up was [this](http://docs.codehaus.org/display/GROOVY/Tutorial+2+-+Code+as+data,+or+closures), a tutorial on [Groovy](http://groovy.codehaus.org/) that cheerfully proclaims that what is meant by “code as data” is *closures*! No, no, NO!!!!
“Code as data”, aka “code is data” signifies the ability to *manipulate*
code, i.e. to construct and take apart programs. At the most primitive level that can be accomplished
by representing source code as strings, which is possible in most programming languages. Going beyond that, many
programming languages define an AST data structure, with a parser and
pretty printer, that allows manipulation of code in a more structured
manner, enforcing most, if not all, syntactic constraints of the
However, neither of these approaches fully capture what is meant by
“code is data” in the Lisp tradition. There code really *is*
data. There is no special AST data type and associated parser and
pretty printer. Instead all programs are represented in terms of the
ordinary data types of the language, such as symbols and lists. The
concrete syntax of programs is subsumed by the standard external
representation of data.
None of this has anything to do with closures.