Subject: Re: Is there a FAQ?
From: Erik Naggum <erik@naggum.net>
Date: Sun, 04 Nov 2001 17:19:59 GMT
Newsgroups: comp.lang.lisp
Message-ID: <3213883213567913@naggum.net>

* Jeremy Whetzel <lists@toadmail.com>
| It seems that there are a lot of, uhm, 'versions' (for lack of a better
| word) of lisp out there.

  This is very true.  "Lisp" is a family of languges, more than a single
  language.  Some of the things they have in common is that they look the
  same: Code is written as lists whose first element define the nature and
  meaning of the rest of the elements of the list means, and can be one of
  a regular operator, where the remaining elements of the list are also
  evaluated according to this rule before the operator is called with the
  values as arguments, a macro, which processes the remaining elements of
  the list itself in order to return a new form to replace itself, or a
  special operator, where the meaning of the remaining elements are unique
  to that special operator, much like a macro.  Typically, both macros and
  special operators make an effort not to impose a burden on the reader of
  the code, and Lisps in general have furthermore agreed on a most of them,
  so what you learn about let and let*, cond and if, setq, catch and throw,
  progn, quote, etc, and the syntax you learn should be almost uniformly
  applicable, too, like 'x for (quote x), ; for comments, "" for strings, `
  and , for constructed lists, \ for preventing a character from its normal
  interpretation and making it a constituent character, whitespace between
  most tokens, because almost everything else is considered a constituent
  character of a potential symbol or number, and not much more...

  Once you get the hang of the basic, common syntax and how to read Lisp
  code based on the first word of a form (i.e., a list starting with a
  symbol that names the form), reading any of the numerous Lisp family
  members will show their differences more than the surface similarities
  seem to let on.

| Hopefully a little bit of learning will at least help with how to follow
| some of the syntax and the like (even if it's not exactly the same,
| hopefully it will be somewhat similar)

  It should take you a _very_ short time to get the hang of the syntax,
  once you realize that there is very little _meaning_ in the syntax,
  unlike most other programming languages.  Many newcomers to Lisp seem to
  struggle with the syntax because they want it to mean too much.  All the
  syntax does in most Lisps is to produce enable objects to be read into
  memory.  Most syntaxes are read and interpreted by the compiler, only,
  and whatever objects the compiler sees are not seen by anything else.
  This is probably one of the ways that Lisp differs the most from other
  languages and it has had a huge impact on how the language has evolved
  over the years.  Whereas most language evolve by adding syntax, Lisp has
  evolved by adding constructs at a more "semantic" level.  The only thing
  has caused Lisp to evolve syntax is adding new data types, while most
  other language have not developed syntax for new data types.  So while
  you can implement linked lists in every language, Lisp added syntax to
  make them easy to read and write so that both code and data could use the
  simple syntax of lists.  You may find, as most of us have, that this is
  vastly superior to the way, e.g., the C family of languages "initializes"
  data structures with a very limited number of built-in types -- their way
  of extending the type system does not work for reading and writing them
  in either programs or data.  Lisp's idea of "code is data", that the
  compiler uses regular language features to read in code, sets it off from
  the rest in a fundamental way that many newcomers to Lisp take a long
  time to figure out and appreciate.  Once they "get it", other languages
  tend to look fairly stupidly designed by comparison and the very strange
  things that people do with their syntaxes is downright depressing.

///
-- 
  Norway is now run by a priest from the fundamentalist Christian People's
  Party, the fifth largest party representing one eighth of the electorate.
-- 
  Carrying a Swiss Army pocket knife in Oslo, Norway, is a criminal offense.