From ... Path: archiver1.google.com!news1.google.com!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!cpk-news-hub1.bbnplanet.com!news.gtei.net!newsfeed1.cidera.com!Cidera!news100.world-online.no!news100.world-online.no!news01.chello.no!not-for-mail Newsgroups: comp.lang.lisp Subject: Re: Is there a FAQ? References: <87bsijwu9z.fsf@toadmail.com> <87668rz211.fsf@photino.sid.rice.edu> <877kt7cerw.fsf@toadmail.com> Mail-Copies-To: never From: Erik Naggum Message-ID: <3213883213567913@naggum.net> Organization: Naggum Software, Oslo, Norway Lines: 66 User-Agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.1 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Sun, 04 Nov 2001 17:19:59 GMT X-Complaints-To: abuse@chello.no X-Trace: news01.chello.no 1004894399 212.186.234.171 (Sun, 04 Nov 2001 18:19:59 MET) NNTP-Posting-Date: Sun, 04 Nov 2001 18:19:59 MET Xref: archiver1.google.com comp.lang.lisp:19173 * Jeremy Whetzel | 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.