LISP, What Does Symbolic Language Mean?
Lisp, What's the Significance of a Language Being “Symbolic”?
lisp and Wolfram Language are said to be symbolic languages. But, what does it mean? what's the significance? what's its nature?
i've been talking to myself about that in past hour.
so begin thus, the saga of xah edu corner, extempore! on the meaning of symbolic language!
Stephen Wolfram has particularly claimed, that blab blab what a genius he designed Wolfram Language because from the outset he made it “symbolic”.
But, what's the significance of lang being “symbolic”? is it more powerful? how? what exactly makes a lang symbolic?
i've coded emacs lisp for 10+ years, and Wolfram Language for 10+ years. Both are symbolic languages. Wolfram Language is a lisp basically.
they are “symbolic”, in the sense that they deal with symbols. In short, all identifiers can be their values, or just their “names” itself.
e.g. in python, x = 3, then x is just 3. but in lisp, x and 3 are different thing. 3 is value. you can get x by (quote x)
more explanation about lisp symbol here Emacs Lisp Symbol (tutorial)
and GNU Emacs Lisp Reference Manual: Symbols (info "(elisp) Symbols")
but off the bat from experience, i'd say lang that's “symbolic” has little to do with lang's power. but i want a answer by logic.
to consider meaning of “symbolic”, we need to consider lang design elements. what things, if possible, constitute element of lang design?
first, comp lang is a instruction set. That's its nature.
first of all, to talk about computer lang, you need to have a machine in mind. Because no machine, no instruction.
machine here is, eg 10 stones on floor, abacus, turing machine, intel icoreX cpu, Java Virtual Machine.
so, when considering computer lang design, we want to find elements of lang, there does not seem to have a well defined set of such.
that is, symbolic lang, closure, object, lambda, subroutine, if, for, pointer, strong types, rewrite lang, array lang, brainfuck… there actually is no clearly defined things.
rephrase: there is no clearly defined elements that we can say, that computer lang comprise of. Rather, it's free form, free roam, open design.
but basic concept seems exist: variable, subroutine, branch control, loop, value, types (number, string, array).
recap: we want to find the nature of symbolic lang. We looked for elements of computer lang. No such. So, lisp symbolic is just 1 of myriad pecularity.
now failing some kinda logical foundation search, we turn into experience, or survey approach.
am getting tired. but afaik, the lisp/WL approach of “symbolic”, isn't embraced to be uber in comp lang design outside of lisp circle.
but still i think lisp “symbolic” nature can be captured in some sense as kinda layer. A certain uniform treatment of something…
certain generalized treatment of identifiers.
from Brandon Bloom @BrandonBloom 2016 Aug 31
@xah_lee I think mostly it is a shorthand and anachronism for “term rewriting language”.
that made a lot sense!
i think that's it. The effect of a language being “symbolic” is just that it allows term rewriting. (the limited form of term-rewrite feature is lisp macros. The full feature is Mathematica's pattern matching.)
then, if we keep asking, what does term rewiring give us? what power? The answer is, not much. Term rewiring is just one model of computation. Term rewriting language is particularly good for computer algebra (e.g. manipulate formulas such as expand polynomial, solve equations, derivative, etc.)