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

Reply via email to