* the concept of assignment implying _time_ and messing with the substitution model.
* recursive functions that are iterative
* iterative structures that are recursive
* At the base of the base of the data abstraction in LISP is, well, nothing.
* Code as data, data as code, really strongly underlined.
* The whole LISP written in itself (as a sort of fixed point of a language that defines a language). That is really something.
* The idea of using a language to write a language that lets you express your problem.
That last one is probably obvious to most, but it was really novel to me (despite years of writing functions to compute answers).
* the concept of assignment implying _time_ and messing with the substitution model.
* recursive functions that are iterative
* iterative structures that are recursive
* At the base of the base of the data abstraction in LISP is, well, nothing.
* Code as data, data as code, really strongly underlined.
* The whole LISP written in itself (as a sort of fixed point of a language that defines a language). That is really something.
* The idea of using a language to write a language that lets you express your problem.
That last one is probably obvious to most, but it was really novel to me (despite years of writing functions to compute answers).