He used to make a big thing about it being a "symbolic" programming language, which made more sense to me - a programming language that treats symbols as a first-class concept is indeed a rare beast. Only computer algebra systems really attempt this, and of those few have really well designed programming languages. Yes, Lisp has symbols, but you can't really do much that's interesting with them directly. (sqrt x) when x is unbound is an error, not the abstract concept of taking the square root of an unspecified value. The idea of taking something that would normally be a "compiler optimization", like sqrt(x^2) => abs(x), and making it available at runtime as part of the evaluation model, can be seen as an evolution of the powerful idea of including (eval) in the language.
How does javascript qualify? x2 => ReferenceError: x is not defined, same as any other non symbolic language.
As for libraries - yes, there exist symbolic manipulation systems for Lisp - and Javascript, and Python (notably SymPy). But none of them integrate seamlessly with the language, because there's fundamental conflicts with the language's default evaluation model. You need to design something with that in mind from scratch, and doing it such a way as to make something elegant and composable and not a huge mess is really hard.
It has symbols as a basic data type, slightly similar to Lisp.
> But none of them integrate seamlessly with the language, because there's fundamental conflicts with the language's default evaluation model
Lisp has symbols to implement these other evaluation models.
Every evaluation model will have some problems integrating other ones. Most of them have a particular purpose: algebra, theorem proving, predicate logics, planning, ...
He used to make a big thing about it being a "symbolic" programming language, which made more sense to me - a programming language that treats symbols as a first-class concept is indeed a rare beast. Only computer algebra systems really attempt this, and of those few have really well designed programming languages. Yes, Lisp has symbols, but you can't really do much that's interesting with them directly. (sqrt x) when x is unbound is an error, not the abstract concept of taking the square root of an unspecified value. The idea of taking something that would normally be a "compiler optimization", like sqrt(x^2) => abs(x), and making it available at runtime as part of the evaluation model, can be seen as an evolution of the powerful idea of including (eval) in the language.