On 2/6/26 8:42 AM, Robert Heller wrote:
There are only two syntacic terms: lists and atoms. Atoms are
symbols (eg alphanumerics), numbers (integers, rational numbers,
floating point numbers, and bignums), characters, strings.
But yes, LISP is a very different animal from Algol or C, or really
most other languages.
Actually, there is but a single root syntactic element: the S-Expression
(short for Symbolic Expression). This subdivides into Atoms and
Non-Atomic S-Expressions.
An Atom is a single entity that cannot be subdivided, while a Non-Atomic
S-Expression is a collection of two or more simpler S-Expressions.
A List is either of two things: either a special reserved Atom called
"nil," which represents an empty list, or a Non-Atomic S-Expression that
ends in nil. A simple example of a list would be (foo bar baz). If you
peel off elements from this, you will eventually get down to nil.
But there are other, less common, NATSs: dotted pairs, e.g., (foo .
bar), and dotted lists (foo bar . baz) are S-expressions that do *not*
implicitly end in nil (i.e., they end in an Atom other than nil). There
are also circular lists, that eventually just turn back upon themselves.
In fact, a proper List can be represented as a dotted pair or dotted
list ending in nil, i.e., (foo bar baz . nil) is equivalent to (foo bar
baz). Most of the time, these (especially circular lists) are malformed
lists, but there are rare cases in which they are created intentionally.
I took a full year of LISP at CSU Long Beach, where we used a LISP
dialect that we got from the University of Texas, and I thank you for
the trip down memory lane.
As to Emacs, I have a vague recollection of using one or two heavily
customized Commodore Amiga ports of Emacs (one of them part of a
Modula-2 development system), but about all I can recall is that it's
easier to become proficient in then vi is (but what isn't?)
--
JHHL