Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Posting-Version: version B 2.10.1 6/24/83; site utah-cs.UUCP
Path: utzoo!watmath!clyde!burl!ulysses!allegra!mit-eddie!godot!harvard!seismo!utah-cs!shebs
From: shebs@utah-cs.UUCP (Stanley Shebs)
Newsgroups: net.lang.lisp
Subject: Re: Life in net.lang.lisp
Message-ID: <3170@utah-cs.UUCP>
Date: Fri, 4-Jan-85 11:33:28 EST
Article-I.D.: utah-cs.3170
Posted: Fri Jan  4 11:33:28 1985
Date-Received: Sun, 6-Jan-85 00:42:22 EST
References: <313@ecsvax.UUCP>, <18900002@uiucdcs.UUCP>
Organization: Univ of Utah CS Dept
Lines: 21

I don't know exactly what "pure Lisp" is supposed to be - I've
seen several definitions floating around.  There are at least
two main flavors.

The simpler version of Lisp does not have functions as first-class
objects.  Implementations include such dialects as Maclisp, Franz,
and PSL.  In these dialects, there is no good way to do coroutines
(except by brute force, amounting to building your own specialized
interpreter).

The better versions of Lisp have promoted functions to first-class
status.  The data objects themselves are called *closures* (essentially
a lambda expression + a context).  Implementations include
Scheme (the grandaddy), Scheme84, T, Common Lisp, and 3-Lisp.
Coroutines are ridiculously easy - just build the function
corresponding to the remaining computation (usually called
a *continuation*), save it somewhere, then call the other coroutine's 
continuation.

						stan shebs
						(shebs@utah-cs)