R is like:
- Clojure, because most objects are immutable
- Scala, because it combined functional and OO techniques
- Node.js, because the interpreter is single threaded
- PHP, because it favours pragmatism over purity
- Lisp, because it's homoiconic
- Perl, because OO is (mostly) implemented using the language itself
@cscheid, R is homoiconic in your more narrow sense. You don't just "have access to" the AST, the AST and in-memory representation of programs is literally a tree of R objects. The R parser constructs a tree of data objects and the R evaluator merely steps over that tree.
quote()
is nearly a no-op, as it just returns its argument unevaluated.