By external representation I mean a representation of code and/or data that the programmer can see and/or interact with. With current technologies this almost always means some form of serialized text (an exception would be LabView where programs are represented through an interactive graphical environment).
An internal representation is a representation of code and/or data that is processed internally by a computer but is not directly visible to the programmer.
Example:
Internal representation:
(defun fact (n)
(case n (1
1)
(otherwise (* n (fact (- n 1))))))
External representation:
The set of linked cons cells that the above list gets parsed into by a Lisp interpreter.
You can only edit posts for a certain amount of time.
Doesn't the requirement for homoiconicity become vacuous then?
The definition was:
> "a language in which the source code and the corresponding abstract parse tree have identical representations"
Now is:
> "a language in which the source code and the corresponding abstract parse tree have identical external representations"
Where external representation of source code is defined as the representation that's used in the interpreter or compiler, that is, the abstract parse tree. So the definition becomes: "a language in which the abstract parse tree has the same representation as the abstract parse tree"?
Alternatively replace "external" by "internal" everywhere in this post, if "internal" is the right name for CONS cells.
No the reversal in my above comments only applied to the example, not the way I defined internal vs. external representations. Sorry for the confusion.
My point is that you can't tell by looking at the defun in my above comment whether you're looking at Lisp source code or the parse tree (represented as a nested list) for that source code. The same would not be true in C where the external representation of the parse tree would be the C syntax for initializing some set of nested struct's. That would look very different than the source code itself.
An internal representation is a representation of code and/or data that is processed internally by a computer but is not directly visible to the programmer.
Example:
Internal representation:
External representation:The set of linked cons cells that the above list gets parsed into by a Lisp interpreter.