As a programming language, LISP is characterized by the following ideas:
· Computing with symbolic expressions rather than numbers.
· Representation of symbolic expressions and other information by list structure in computer memory.
· Representation of information on paper, from keyboards and in other external media mostly by multi-level lists and sometimes by S-expressions. It has been important that any kind of data can be represented by a single general type.
· A small set of selector and constructor operations expressed as functions, i.e. car, cdr and cons.
· Composition of functions as a tool for forming more complex functions.
· The use of conditional expressions for getting branching into function definitions.
· The recursive use of conditional expressions as a sufficient tool for building computable functions.
· The use of lambda-expressions for naming functions.
· The storage of information on the property lists of atoms.
· The representation of LISP programs as LISP data that can be manipulated by object programs. This has prevented the separation between system programmers and application programmers. Everyone can ``improve'' his LISP, and many of these ``improvements'' have developed into improvements to the language.
· The conditional expression interpretation of Boolean connectives.
· The LISP function eval that serves both as a formal definition of the language and as an interpreter.
· Garbage collection as the means of erasure.
· Minimal requirements for declarations so that LISP statements can be executed in an on-line environment without preliminaries.
· LISP statements as a command language in an on-line environment.