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)