Newsgroups: comp.lang.misc
Path: utzoo!utgpu!watserv1!tolstoy.waterloo.edu!mhcoffin
From: mhcoffin@tolstoy.waterloo.edu (Michael Coffin)
Subject: Re: scheme [Re: What does an anti-perl look like]
Message-ID: <1991Jun26.223026.13792@watserv1.waterloo.edu>
Sender: news@watserv1.waterloo.edu
Organization: University of Waterloo
References: <4601@optima.cs.arizona.edu>
Date: Wed, 26 Jun 1991 22:30:26 GMT
Lines: 23

There's at least one advantage to the lisp syntax, and that advantage
is important to lispers, although others may not find it important.
Lisp programs have a simple, logical representation as data within
lisp: a program is a list of lists, i.e., a tree.  In most programming
languages, source-to-source transformations are a pain because to do
anything general you have to parse the language into some idiosyncratic
form, manipulate it, and then translate back into the source language.
In lisp you put a single quote in front of the program and you have
data.  That's why lisp is the language of choice for building embedded
languages.  It's also why lisp has general-purpose syntax extension
that integrates neatly with the rest of the language (e.g.,
extend-syntax) while C has a crude, tacked-on macro processor
pre-pass.

For people who are interested in the semantics of new constructs as
opposed to syntax, this is a big win.  For example, for fun I once
implemented ``Icon in Scheme'', using streams with lazy evaluation to
implement generators and coexpressions.  The syntax was lisp-ish, but
it had equivalents for all the interesting Icon constructs except
string scanning.  Although I was learning Scheme at the time, it only
took me about three days to get it running.

-mike
