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