Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 22 Sep 87 03:51:40 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 09/22/87 at 03:47:22 EDT Received: from BRANDEIS.BITNET (ADLER1) by MITVMA.MIT.EDU (Mailer X1.25) with BSMTP id 5870; Tue, 22 Sep 87 03:47:19 EDT Date: Tue, 22 Sep 87 03:45 EDT From: Subject: scoop wanted To: scheme@mc.lcs.mit.edu X-Original-To: scheme@mc.lcs.mit.edu, ADLER1 From: BINAH::ADLER1 21-SEP-1987 22:43 To: Orig_To! INFO-SCHEME@OZ.AI.MIT.EDU, ADLER1 Subj: SCOOPS WANTED I'm new on this network. One of the first messages I received suggests that someone recently distributed a version of SCOOP (= SCheme + Object Oriented Programming) on the network. I'd be very interested in obtaining a copy. I believe that the version in question was written on top of CScheme which I have no difficulty obtaining via ftp. If you can send me a copy of SCOOP at the following address, I would appreciate it: ghoti@cauchy.mit.edu Or, if you can tell me where I can ftp it and how, I'll more simply do that and avoid possible corruption of the file by the mails. Thanks. ghoti@cauchy.mit.edu  Received: from geneva (TCP 2206400372) by MC.LCS.MIT.EDU 21 Sep 87 13:36:47 EDT Received: by GENEVA.AI.MIT.EDU; Mon, 21 Sep 87 13:26:38 edt Date: Mon, 21 Sep 87 13:26:38 edt From: jinx@GENEVA.AI.MIT.EDU (Guillermo J. Rozas) Message-Id: <8709211726.AA27744@geneva> To: mcvax!kddlab!titcca!secisl!tau@seismo.css.gov (TAUCHI) Cc: scheme@mc.lcs.mit.edu In-Reply-To: ("Yatchan" TAUCHI's message of 9 Sep 87 11:23:30 GMT <1126@secisl.seclab.JUNET> Subject: Wanted: Cscheme5 (In English) Reply-To: jinx@zurich.ai.mit.edu I got SCOOPS (= Scheme + Object Oriented Programming) which is written in Cscheme 5 via Network News. Unfortunately I have only old scheme of Revised Revised Scheme report. I heard it could be got from MIT, but not sure. If you can have any information of getting Cscheme or you can distribute it, please send me a Email. There are two main ways of obtaining CScheme Arpanet/Internet FTP: host prep.ai.mit.edu contains a tar file (and a compressed tar file) of the distribution directory. You can log in as scheme, password scheme. The files are /scheme/dist.tar and /scheme/dist.tar.Z Tape: We'll send you a tar tape if you send a check for US $200 to Scheme Distribution co Prof. Hal Abelson 545 Technology Sq. Cambridge MA 02139 USA  Received: from uunet.UU.NET (TCP 30003106601) by MC.LCS.MIT.EDU 15 Sep 87 22:58:05 EDT Received: from munnari.UUCP by uunet.UU.NET (5.54/1.14) with UUCP id AA23921; Tue, 15 Sep 87 22:46:45 EDT Message-Id: <8709160246.AA23921@uunet.UU.NET> Received: from cidam (via goanna) by munnari.oz with SunIII (5.5) id AA19656; Wed, 16 Sep 87 12:18:22 EST Received: by cidam.rmit.oz (4.3+RMIT/4.7) id AA18688; Wed, 16 Sep 87 08:13:02 EST Date: Wed, 16 Sep 87 08:13:02 EST From: munnari!cidam.rmit.oz!mg@uunet.UU.NET (Mike A. Gigante) To: scheme@mc.lcs.mit.edu Subject: prolog in scheme Does anyone have such a beast (that you are willing to share)? I know you can use the query system (as in SICP) in a similar manner to prolog but is not really enough. It would also require a *lot* of efficiency hacking for any serious use... Any dialect of scheme would be ok. Mike  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 15 Sep 87 05:09:14 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA16117; Tue, 15 Sep 87 01:46:38 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 14 Sep 87 14:43:54 GMT From: mcvax!dutrun!dutesta!brouw@seismo.css.gov (Gerard Brouwer) Organization: Delft University of Technology, Faculty of Electrical Engineering. Subject: Wanted: SCHEME/COMMON-LISP compiler documentation Message-Id: <976@dutesta.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu At the Delft University of Technology we are developing an architecture for a LISP-computer based on Eu-LISP level 0, which is related to SCHEME. Part of the project is building a compiler for this new architecture. To gain experience in the usage of SCHEME-based compilers we will be studying several already existing compilers. At this moment we are looking for documentation of the following SCHEME- and COMMON-LISP-implementations: - T3 (The ORBIT-compiler) - MIT Scheme - Scheme48 - Scheme-84 - Kyoto Common Lisp (KCL) Our special interest is in the compilation techniques used by the various implementations, such as used intermediate languages, code-generating, optimization at various levels. If you have any information and/or documentation available or know where we can get the information/documentation, please contact us. Thanks for your cooperation. Gerard Brouwer UUCP: MCVAX!dutrun!dutesta!brouw Delft University of Technology Department of Electrical Engeneering Section Computer Architecture P.O. Box 5031 2600 AG Delft, The Netherlands Phone: 015-785021 015-783644  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 14 Sep 87 11:37:03 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 09/14/87 at 11:33:56 EDT Received: from BRANDEIS.BITNET (ADLER1) by MITVMA.MIT.EDU (Mailer X1.25) with BSMTP id 1897; Mon, 14 Sep 87 11:33:36 EDT Date: Sun, 13 Sep 87 03:40 EDT From: Subject: subscription To: scheme@mc.lcs.mit.edu X-Original-To: scheme@mc.lcs.mit.edu, ADLER1 I sent you a message a while ago requesting that I be added to your mailing list. If you have not yet done so, please add me to your mailing list. Thank you. Sincerely, ADLER1@BRANDEIS.BITNET  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 10 Sep 87 14:09:33 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA03724; Thu, 10 Sep 87 09:03:18 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 9 Sep 87 11:23:30 GMT From: mcvax!kddlab!titcca!secisl!tau@seismo.css.gov ("Yatchan" TAUCHI) Organization: SECOM Intelligent Systems Laboratory, JAPAN Subject: Wanted: Cscheme5 (In English) Message-Id: <1126@secisl.seclab.JUNET> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu I got SCOOPS (= Scheme + Object Oriented Programming) which is written in Cscheme 5 via Network News. Unfortunately I have only old scheme of Revised Revised Scheme report. I heard it could be got from MIT, but not sure. If you can have any information of getting Cscheme or you can distribute it, please send me a Email. --- Yasuyuki Tauchi Intelligent Systems Laboratory SECOM Co Ltd 6-11-23 Shimo-Renjaku Mitaka, Tokyo 181 JAPAN JUNET: tau%seclab.junet@kddlabs.jp UUCP: seismo!kddlab!titcca!secisl!tau PHONE: 0422-46-5600[japan] FAX: 0422-48-6841[japan]  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 10 Sep 87 08:37:01 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA00901; Thu, 10 Sep 87 05:32:29 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 10 Sep 87 11:26:33 GMT From: rich@EDDIE.MIT.EDU (Richard Caloggero) Organization: MIT EE/CS Computer Facility, Cambridge, MA Subject: On-line documentation on T and/or CSCHEME. Message-Id: <6816@eddie.MIT.EDU> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu Can anyone out there point me to on-line papers or other documents on the design and implementation of T or CSCHEME? Thanx. -- Rich  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 9 Sep 87 22:38:24 EDT Date: Wed, 9 Sep 87 20:00:53 EDT From: Jonathan A Rees Subject: test message, ignore To: scheme@MC.LCS.MIT.EDU Reply-to: Scheme-Request@MC.LCS.MIT.EDU Message-ID: <252467.870909.JAR@AI.AI.MIT.EDU> [I'm ruthlessly weeding out bad addresses on the list yet again.]  Received: from bu-cs.BU.EDU (TCP 20061201001) by MC.LCS.MIT.EDU 3 Sep 87 14:15:30 EDT Received: from bucsd.bu.edu by bu-cs.BU.EDU (3.2/4.7) id AA19121; Thu, 3 Sep 87 14:11:21 EDT Return-Path: Received: by bucsd.bu.edu (5.31/4.7) id AA06293; Thu, 3 Sep 87 14:12:26 EDT Date: Thu, 3 Sep 87 14:12:26 EDT From: ab@bu-cs.bu.edu Message-Id: <8709031812.AA06293@bucsd.bu.edu> To: scheme@mc.lcs.mit.edu Subject: Please remove my address from the mailing list Thanks you.  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 3 Sep 87 10:13:28 EDT Date: Thu, 3 Sep 87 10:14:48 EDT From: Jonathan A Rees Subject: Looking for Scheme implementation To: pollux.usc.edu!pgarg@OBERON.USC.EDU cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of 2 Sep 87 20:20:46 GMT from pollux.usc.edu!pgarg at OBERON.USC.EDU (Pankaj K. Garg) Message-ID: <249725.870903.JAR@AI.AI.MIT.EDU> I have an ugly and incomplete, but effective, scheme implementation as a bunch of Common Lisp macros. If you can't FTP it I'll mail it to you. The files are MC.LCS.MIT.EDU: JAR; PSEUDO > and PSEUDO DOC.  Received: from bu-cs.BU.EDU (TCP 20061201001) by MC.LCS.MIT.EDU 3 Sep 87 09:16:58 EDT Received: from bucsd.bu.edu by bu-cs.BU.EDU (3.2/4.7) id AA05932; Thu, 3 Sep 87 09:14:58 EDT Return-Path: Received: by bucsd.bu.edu (5.31/4.7) id AA24268; Thu, 3 Sep 87 09:16:04 EDT Date: Thu, 3 Sep 87 09:16:04 EDT From: alpert@bu-cs.bu.edu Message-Id: <8709031316.AA24268@bucsd.bu.edu> To: scheme@mc.lcs.mit.edu Subject: Please remove this address from the mailing list Thank you  Received: from bu-cs.BU.EDU (TCP 20061201001) by MC.LCS.MIT.EDU 3 Sep 87 07:06:52 EDT Received: from bucsf (128.197.2.9) by bu-cs.BU.EDU (3.2/4.7) id AA04585; Thu, 3 Sep 87 07:04:41 EDT Return-Path: Received: by bucsf (4.12/4.7) id AA19134; Thu, 3 Sep 87 07:04:48 edt Date: Thu, 3 Sep 87 07:04:48 edt From: gjc@bucsf.bu.edu (George J. Carrette) Message-Id: <8709031104.AA19134@bucsf> To: scheme@mc.lcs.mit.edu Whats the cheapest way to get S&ICP? The bookstores seem to have it for around forty clams.  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 3 Sep 87 02:11:13 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA03339; Wed, 2 Sep 87 22:53:05 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 3 Sep 87 01:16:47 GMT From: xanth!kahn@mcnc.org (Gary I Kahn) Organization: Old Dominion University, Norfolk Va. Subject: Thanks for comments about S&ICP book Message-Id: <2347@xanth.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu Thank you for the information about the various Scheme texts and tutorials. I tried to mail individual notes, but several got returned because I don't understand the address system well enough. Gary I. Kahn kahn@odu.edu  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 3 Sep 87 02:10:52 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA03079; Wed, 2 Sep 87 22:40:04 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 2 Sep 87 20:20:46 GMT From: pollux.usc.edu!pgarg@OBERON.USC.EDU (Pankaj K. Garg) Organization: University of Southern California, Los Angeles Subject: Looking for Scheme implementation Message-Id: <4297@oberon.USC.EDU> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu Can someone please point me to an implementation of Scheme, preferably in Common Lisp? Thanx... ...pankaj US Mail: Computer Science Department University of Southern California Los Angeles, CA 90089-0782 Phone: (213)743-7995 E-mail: garg@cse.usc.edu  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 1 Sep 87 21:20:05 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA03777; Tue, 1 Sep 87 17:47:18 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 1 Sep 87 23:23:17 GMT From: super.upenn.edu!linc.cis.upenn.edu!brant@RUTGERS.EDU (Brant Cheikes) Organization: University of Pennsylvania Subject: getting scheme up on a 3B1 Message-Id: <1914@super.upenn.edu> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu I hope this is the right place to post this... I'm trying to get C-Scheme running on an AT&T Unix PC (approx Unix SV.2). First Q: what's the latest C-Scheme version and where is it available from (FTP preferred)? (want to make sure I'm working with the latest version). 2nd Q: on what basis does one define STACK, HEAP, and CONSTANT size in config.h? When I use the defaults and try to run scheme, I get a "Not enough memory for this configuration." message, and scheme halts. If I try "scheme -heap 75 -stack 75", it comes up ok. But I had to tweak the numbers to get it to work-- isn't there a more principled approach? Last Q: the runtime/ and sf/ areas have .scm, .psb, and .bin files. I see that one can convert psb/bin easily, but is there some way to generate psb or bin files from scm files? ANY assistance would be appreciated! Thanks, Brant ----------------------------------------------------------------------------- Brant Cheikes University of Pennsylvania ARPA: brant@linc.cis.upenn.edu Computer and Information Science =============================================================================  Received: from bu-cs.BU.EDU (TCP 20061201001) by MC.LCS.MIT.EDU 28 Aug 87 13:06:45 EDT Received: from buengc (BUENGC.BU.EDU) by bu-cs.BU.EDU (3.2/4.7) id AA25423; Fri, 28 Aug 87 13:04:34 EDT Return-Path: Received: by buengc (4.12/4.7) id AA05619; Fri, 28 Aug 87 13:00:34 edt Date: Fri, 28 Aug 87 13:00:34 edt From: wtm@buengc.bu.edu (W. Thomas Meier) Message-Id: <8708281700.AA05619@buengc> To: scheme@mc.lcs.mit.edu Subject: Please remove me from the mailing list Please remove me from this mailing list, as I am reading it from another source. +Tom Meier  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 28 Aug 87 08:06:28 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 08/28/87 at 08:05:21 EDT Received: from NUSVM.BITNET by MITVMA.MIT.EDU (Mailer X1.24) with BSMTP id 6459; Fri, 28 Aug 87 08:05:17 EDT Received: by NUSVM (Mailer X1.23b) id 3396; Fri, 28 Aug 87 20:04:14 SST Date: Fri, 28 Aug 87 20:04:00 SST From: fung-chai lim Subject: info file To: SCHEME@MC.LCS.MIT.EDU info file  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 27 Aug 87 22:51:29 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA15025; Thu, 27 Aug 87 17:19:59 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 27 Aug 87 13:33:11 GMT From: rich@eddie.mit.edu (Richard Caloggero) Organization: MIT EE/CS Computer Facility, Cambridge, MA Subject: On-line Documentation Message-Id: <6672@eddie.MIT.EDU> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu Hi there... Can anyone email, or point me to any *on-line* documentation/papers on the design and implementation of CSCHEME and/or T (Yale's production SCHEME interpeter/compiler)? Thanx in advance! -- Rich  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 27 Aug 87 12:53:20 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 08/27/87 at 12:52:33 EDT Received: from YALEVM.BITNET by MITVMA.MIT.EDU (Mailer X1.24) with BSMTP id 3700; Thu, 27 Aug 87 12:52:29 EDT Received: by YALEVM (Mailer X1.24) id 0211; Thu, 27 Aug 87 12:42:31 EST Date: Thu, 27 Aug 87 12:42 EST From: JELROBN%YALEVM.BITNET@MITVMA.MIT.EDU Subject: Please remove me from the mailing list. To: SCHEME@MC.LCS.MIT.EDU Please remove me from this mailing list. Thanks.  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 23 Aug 87 00:18:18 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA04673; Sat, 22 Aug 87 20:52:02 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 23 Aug 87 01:44:56 GMT From: xanth!kahn@mcnc.org (Gary I Kahn) Organization: Old Dominion University, Norfolk Va. Subject: Scheme tutorial Message-Id: <2229@xanth.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu I'm new to Scheme, but have limited experience with LISP. I bought PC Scheme, but the manual is not a Scheme tutorial. TI's manual mentions the book by Abelson, Sussman, and Sussman (Structure and Implementation of Computer Programs) as a good book for learning Scheme. I'm ready to order the book if it's good for learning Scheme. Does anyone out there have anything to say about this book, or any other Scheme books? I'm particularly interested in the features of Scheme which are different from LISP, such as engines, closures, and it's treatment of everything as first-class objects. Thanks in advance. Gary I. Kahn kahn@xanth.odu.edu  Received: from amax.npac.syr.edu (TCP 20071400404) by MC.LCS.MIT.EDU 20 Aug 87 12:49:19 EDT Received: from sungod.nsc.syr.edu by amax.npac.syr.edu id aa03736; 20 Aug 87 12:47 EDT Date: Thu, 20 Aug 87 12:16 EDT From: Kurt Swanson Subject: C Scheme To: scheme@mc.lcs.mit.edu X-VMS-To: IN%"scheme@mc.lcs.mit.edu" I'm looking for C Scheme source for both VMS and UNIX. Is there anyone on bitnet who could possibly send/file them to me? I also have FTP access to Internet, but my attempts to get the source have failed. Kurt Swanson  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 19 Aug 87 14:17:34 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 08/19/87 at 13:34:13 EDT Received: from IRLEARN.BITNET by MITVMA.MIT.EDU (Mailer X1.24) with BSMTP id 1255; Wed, 19 Aug 87 13:34:09 EDT Received: by IRLEARN (Mailer X1.24) id 8040; Wed, 19 Aug 87 17:37:25 GMT Date: Wed, 19 Aug 87 17:34:50 GMT From: Donal O'Mahony Subject: Scheme Instructors Guide To: SCHEME@MC.LCS.MIT.EDU I intend to teach a course next year based on the Structure and Interpretation of Computer Programs Book. In the stuff that came with C-Scheme Release 4, a mention was made of an "Instructors Guide" to accompany the book. Does anybody know where I can order a copy? Donal O'Mahony Computer Science Dept, Trinity College, Dublin, Ireland.  Received: from Xerox.COM (TCP 1200400040) by MC.LCS.MIT.EDU 16 Aug 87 21:49:38 EDT Received: from Cabernet.ms by ArpaGateway.ms ; 16 AUG 87 02:37:48 PDT Date: 16 Aug 87 02:37 PDT From: masinter.pa@Xerox.COM Subject: Re: selective linking in Lisp In-reply-to: willc%tekchips.tek.com@RELAY.CS.NET's message of 13 Aug 87 16:55:11 PDT (Thu) To: willc%tekchips.tek.com@RELAY.CS.NET cc: scheme@mc.lcs.mit.edu Message-ID: <870816-023748-4773@Xerox> Will, in regard to selective linking in Common Lisp, your characterization of the response from the cleanup committee and X3J13 is incorrect. I've reviewed the mail on the topic (issue "EVAL-DEFEATS-LINKER".) None of the responses came close to suggesting that "selective linking isn't worth thinking about." However, a number of people responded that they thought about it in a different way than you do. The specific issue was discussed at length, and the discussion has not been brought to a conclusion. I don't think this is the appropriate forum to debate the point or to summarize the alternatives discussed so far. If anyone is interested in helping carry this topic further, I can make the mail archives available.  Received: from bu-cs.BU.EDU (TCP 30003134401) by MC.LCS.MIT.EDU 16 Aug 87 20:29:21 EDT Received: from bucsf (BUCSF.BU.EDU) by bu-cs.BU.EDU (3.2/4.7) id AA01328; Fri, 14 Aug 87 16:45:50 EDT Return-Path: Received: by bucsf (4.12/4.7) id AA15933; Fri, 14 Aug 87 07:25:16 edt Date: Fri, 14 Aug 87 07:25:16 edt From: gjc@bucsf.bu.edu (George J. Carrette) Message-Id: <8708141125.AA15933@bucsf> To: scheme@mc.lcs.mit.edu, willc%tekchips.tek.com@RELAY.CS.NET Subject: Re: Gabriel benchmarks in Scheme Cc: rrrs-authors@mc.lcs.mit.edu There was a continuation passing version of tak I ran in VAX-NIL and submitted a couple years ago, called TAKF. It made it into "the book" but unfortunately was not run by many (if any) other lisp implementors. Perhaps an interesting note, on the MIT Lispmachine instruction set (CADR, LM-2, LMI-LAMBDA, TI-EXPLORER) the procedures for TAK and TAKF compile into exactly the same sequence of instructions, and TAKF is slightly faster, with one memory reference less per procedure call (no, make that two memory reference, one for the exit-vector and one for the function-cell). Needless to say, in most lisps TAKF is considerably slower than TAK. In Maclisp or Franz, with FUNCALL, quite considerably slower, although with SUBRCALL in Maclisp there is no problem.  Received: from bu-cs.BU.EDU (TCP 30003134401) by MC.LCS.MIT.EDU 14 Aug 87 20:21:04 EDT Received: from bucsf (BUCSF.BU.EDU) by bu-cs.BU.EDU (3.2/4.7) id AA01313; Fri, 14 Aug 87 16:45:44 EDT Return-Path: Received: by bucsf (4.12/4.7) id AA15964; Fri, 14 Aug 87 07:36:46 edt Date: Fri, 14 Aug 87 07:36:46 edt From: gjc@bucsf.bu.edu (George J. Carrette) Message-Id: <8708141136.AA15964@bucsf> To: scheme@mc.lcs.mit.edu, willc%tekchips.tek.com@RELAY.CS.NET Subject: Re: selective linking in Lisp There is no problem with selective linking while using EVAL, the problem comes up when you add to this the use of INTERN or READ.  Received: from UDEL.EDU (TCP 1200000140) by MC.LCS.MIT.EDU 14 Aug 87 20:19:40 EDT Received: from dewey.udel.edu by Louie.UDEL.EDU id aa04086; 14 Aug 87 10:40 EDT Received: from localhost by Dewey.UDEL.EDU id aa07797; 14 Aug 87 10:40 EDT To: willc%tekchips.tek.com@relay.cs.net cc: fateman@renoir.berkeley.edu, scheme@mc.lcs.mit.edu Subject: Re: FRPOLY; philosophy of benchmarking In-reply-to: Your message of Thu, 13 Aug 87 15:51:01 -0700. <8708132251.AA05333@tekchips.TEK.COM> Date: Fri, 14 Aug 87 10:40:12 -0400 From: David Saunders Message-ID: <8708141040.aa07797@Dewey.UDEL.EDU> I'd like to see the FRPOLY benchmark. I might even undertake the translation to scheme. Can you send me a copy? Thanx, Dave Saunders  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 14 Aug 87 04:17:37 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA01671; Fri, 14 Aug 87 01:14:28 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 14 Aug 87 06:52:35 GMT From: phr@hermes.ai.mit.edu (Paul Rubin) Organization: The MIT AI Lab, Cambridge, MA Subject: Re: Gabriel benchmarks in Scheme Message-Id: <2882@mit-hermes.AI.MIT.EDU> References: <8708122336.AA03890@renoir.Berkeley.EDU>, <8708132219.AA01596@murren> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu I notice that most of the Gabriel benchmarks were run under ORBIT (the compiler for the T system (T is a Scheme dialect)). Possibly you could get in touch with the T authors to avoid duplicating some of the effort of benchmark conversion. See "ORBIT: An Optimizing Compiler for Scheme" by David Kranz et al, Proc. SIGPLAN '86 Symposium on Compiler Construction. That is a good paper to read if you are interested in Scheme compilation, too.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 14 Aug 87 03:01:08 EDT Received: from relay2.cs.net by RELAY.CS.NET id aa04851; 14 Aug 87 2:59 EDT Received: from tektronix.tek.com by RELAY.CS.NET id au15182; 14 Aug 87 2:49 EDT Received: by tektronix.TEK.COM (5.51/6.24) id AA08274; Thu, 13 Aug 87 16:57:04 PDT Received: by tekchips.TEK.COM (5.51/6.24) id AA07301; Thu, 13 Aug 87 16:55:13 PDT Message-Id: <8708132355.AA07301@tekchips.TEK.COM> To: scheme@mc.lcs.mit.edu Subject: selective linking in Lisp From: willc%tekchips.tek.com@RELAY.CS.NET Date: 13 Aug 87 16:55:11 PDT (Thu) Sender: willc%tekchips.tek.com@RELAY.CS.NET [my attempt to reply directly to jrl@zermatt failed; he posted his question here, so I'll reply here] This is an intriguing statement. Can you amplify on this. Is it the use of symbols both as first class objects and as names that causes the problems or is it something else? Depends on what you mean by that. You can't do reliable selective linking on a program that calls EVAL (or its kin such as SYMBOL-VALUE, SYMBOL-FUNCTION, etc) unless the linker can determine the arguments that are passed to EVAL, which is impossible in general. The reason EVAL defeats selective linking is that the argument to EVAL, being a computed quantity, potentially refers to just about any procedure or variable. This is true in all Lisps, including Scheme. The problem with Lisps other than Scheme is that all sorts of standard procedures are specified in such a way that they potentially call EVAL (or SYMBOL-VALUE or SYMBOL-FUNCTION), so even if you scrupulously avoid calling EVAL yourself you still lose because you call FUNCALL or APPLY or something else that calls EVAL (or SYMBOL-VALUE or SYMBOL-FUNCTION). I raised this with the Common Lisp cleanup subcommittee and at the last X3J13 meeting, and was astounded to learn that the Common Lisp vendors generally feel that selective linking isn't worth thinking about. They may be right, in the sense that it would take a fairly drastic overhaul of Common Lisp to make it possible to write reliable selective linkers. I expect most vendors will eventually write unreliable selective linkers that ignore the problems posed by EVAL and its kin, or else they will rely on the programmer to declare all variables that might be needed by a call to EVAL. This might well be good enough for government work. Peace, Will Clinger Tektronix Computer Research Lab  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 14 Aug 87 02:52:37 EDT Received: from relay2.cs.net by RELAY.CS.NET id aa04759; 14 Aug 87 2:48 EDT Received: from tektronix.tek.com by RELAY.CS.NET id aa15182; 14 Aug 87 2:39 EDT Received: by tektronix.TEK.COM (5.51/6.24) id AA04478; Thu, 13 Aug 87 15:53:21 PDT Received: by tekchips.TEK.COM (5.51/6.24) id AA05333; Thu, 13 Aug 87 15:51:04 PDT Message-Id: <8708132251.AA05333@tekchips.TEK.COM> To: fateman@RENOIR.BERKELEY.EDU Cc: scheme@mc.lcs.mit.edu Subject: FRPOLY; philosophy of benchmarking In-Reply-To: Your message of Wed, 12 Aug 87 16:36:13 PDT. <8708122336.AA03890@renoir.Berkeley.EDU> Date: 13 Aug 87 15:51:01 PDT (Thu) From: willc%tekchips.tek.com@RELAY.CS.NET Thank you for explaining the history of the FRPOLY benchmark. I was TA for a course in which Professor Martin lectured at MIT. I certainly believe it is possible to translate MacLisp code automatically into Scheme, and I even suspect that it is easier than translating (e.g.) Ada automatically into Common Lisp. But that's not a very interesting issue. It is important for people to understand benchmarks so they can understand what the results of the benchmark mean. Without that understanding, benchmarking is a worse than useless exercise. I don't understand FRPOLY well enough to convert its PROGs into idiomatic Scheme code. Scheme doesn't support PROG. I know an algorithm for translating any PROG into a single use of CALL-WITH-CURRENT-CONTINUATION surrounding a LETREC, and I have used that algorithm on occasions when my sole interest was in getting an antique piece of code to run, but mindless application of the algorithm makes the code even more opaque. I might add that several other of the Gabriel benchmarks are too large for their significance to be comprehended easily, but with the others I was able to translate them into reasonably idiomatic Scheme code after only a little study. I would be delighted if someone who understood the FRPOLY benchmark were to translate it into Scheme. I think it is far better for that to happen after some delay than for me to do a quick but poor translation. peace, Will Clinger  Received: from murren (TCP 2206400263) by MC.LCS.MIT.EDU 13 Aug 87 18:22:36 EDT Received: by MURREN.AI.MIT.EDU; Thu, 13 Aug 87 18:19:48 edt Date: Thu, 13 Aug 87 18:19:48 edt From: hal@MURREN.AI.MIT.EDU (Hal Abelson) Message-Id: <8708132219.AA01596@murren> To: fateman@renoir.Berkeley.EDU, scheme@mc In-Reply-To: Richard Fateman's message of Wed, 12 Aug 87 16:36:13 PDT <8708122336.AA03890@renoir.Berkeley.EDU> Subject: Gabriel benchmarks in Scheme Reply-To: hal@ai.ai.mit.edu Rich Fateman writes: I find it unfortunate that people feel they have to understand code in MacLisp in order to translate it into Scheme. Can't this be done automatically? I don't want to disparage the Macsyma code (and I have the greatest respect for the memory of Bill Martin), but it is not a good idea to run benchmarks based on code that one doesn't understand, whether or not the translation to Scheme is done automatically. The most striking example of this is the Gabriel Boyer-Moore benchmark, which always (a) returns as its value the value of a PROG that falls off the end (e.g., ALWAYS produces NIL) (b) follows a computation path that turns out to depend upon the default test used by MEMBER. MacLisp and ZetaLisp here use EQUAL and CL uses EQL. Because of this, initially people at Symbolics thought that one of their implementations ran this benchmark much faster than the other -- it turned out that the two implementations were following completely different execution paths. Figuring out these bugs wasted a lot of time on the part of Sussman and Don Allen. Given that the Scheme community is trying to avoid the over-complexities of Common Lisp, it is not too inappropriate for us to give some effort to using understandable benchmarks.  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 13 Aug 87 13:14:10 EDT Received: from (MAILER)MITVMA.BITNET by MITVMA.MIT.EDU on 08/13/87 at 13:11:59 EDT Received: from SUNRISE.BITNET (KSWANSON) by MITVMA.MIT.EDU (Mailer X1.24) with BSMTP id 3518; Thu, 13 Aug 87 13:11:55 EDT Date: Thu, 13 Aug 87 13:02 EST From: Subject: C Scheme To: scheme@mc.lcs.mit.edu X-Original-To: scheme@mc.lcs.mit.edu I'm interested in obtaining a copy of C Scheme, for VMS and UNIX. I tried the telnet way, but wasn't able to get it to work. Is there anyone on BITNET with a copy of either or both of theses who could send/file them to me? Your cooperation is most appreciated, Kurt Swanson  Received: from RTS-10.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 13 AUG 87 11:55:17 EDT Message-Id: <2764857083-3315152@RTS-10> Sender: JRL@RTS-10 Date: Thu, 13 Aug 87 11:51:23 EDT From: jrl@ZERMATT To: willc%tekchips.tek.com@RELAY.CS.NET Cc: scheme@mc.lcs.mit.edu Subject: Re: MacScheme+Toolsmith Version 1.0 In-Reply-To: Msg of 12 Aug 87 14:51:30 PDT (Wed) from willc%tekchips.tek.com@RELAY.CS.NET Selective linking is made possible by the clean design of Scheme, which maintains a rigorous distinction between program and data. It is impossible to write a reliable and effective selective linker for other dialects of Lisp, because they do not maintain this distinction. Peace, William Clinger This is an intriguing statement. Can you amplify on this. Is it the use of symbols both as first class objects and as names that causes the problems or is it something else? Juan  Received: from zohar (TCP 2206400256) by MC.LCS.MIT.EDU 13 Aug 87 00:44:07 EDT Received: by ZOHAR.AI.MIT.EDU; Wed, 12 Aug 87 23:36:17 edt Date: Wed, 12 Aug 87 23:36:17 edt From: gjs@ZOHAR.AI.MIT.EDU (Gerald Jay Sussman) Message-Id: <8708130336.AA08981@zohar> To: willc%tekchips.tek.com@RELAY.CS.NET Cc: scheme@mc.lcs.mit.edu, rrrs-authors@mc.lcs.mit.edu In-Reply-To: willc%tekchips.tek.com@RELAY.CS.NET's message of 12 Aug 87 14:11:55 PDT (Wed) <8708122111.AA15730@tekchips.TEK.COM> Subject: Gabriel benchmarks in Scheme great.. please bring them when you come. regards to anne  Received: from renoir.Berkeley.EDU (TCP 20010101004) by MC.LCS.MIT.EDU 12 Aug 87 19:38:15 EDT Received: by renoir.Berkeley.EDU (5.58/1.25) id AA03890; Wed, 12 Aug 87 16:36:13 PDT Date: Wed, 12 Aug 87 16:36:13 PDT From: fateman@renoir.Berkeley.EDU (Richard Fateman) Message-Id: <8708122336.AA03890@renoir.Berkeley.EDU> To: scheme@mc.lcs.mit.edu, willc%tekchips.tek.com@relay.cs.net Subject: Re: Gabriel benchmarks in Scheme Cc: rrrs-authors@mc.lcs.mit.edu The guts of the FRPOLY benchmark was written by the late Prof. William A. Martin, of MIT, c. 1968. That is, before many people reading this were born, and when the Mathlab group was concerned with other issues than those we face today in programming and teaching programming. I think that the part that causes the most difficulty in understanding is in the middle of the polynomial multiplication routine. A more straightforward program, such as the one in Scheme given in Abelson/Sussman^2, can use O(n^2) rather than O(n) conses in multiplying two degree-n polynomials compared to Martin's program. I find it unfortunate that people feel they have to understand code in MacLisp in order to translate it into Scheme. Can't this be done automatically?  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 12 Aug 87 18:55:04 EDT Received: from relay2.cs.net by RELAY.CS.NET id ae01166; 12 Aug 87 18:39 EDT Received: from tektronix.tek.com by RELAY.CS.NET id bc06697; 12 Aug 87 18:29 EDT Received: by tektronix.TEK.COM (5.51/6.24) id AA20655; Wed, 12 Aug 87 14:53:21 PDT Received: by tekchips.TEK.COM (5.51/6.24) id AA16770; Wed, 12 Aug 87 14:51:32 PDT Message-Id: <8708122151.AA16770@tekchips.TEK.COM> To: scheme@mc.lcs.mit.edu Subject: MacScheme+Toolsmith Version 1.0 Date: 12 Aug 87 14:51:30 PDT (Wed) From: willc%tekchips.tek.com@RELAY.CS.NET Apology: While this amounts to a commercial announcement, I believe its technical content should be of great interest to the Scheme and Lisp communities. MacScheme+Toolsmith Version 1.0 is being introduced this week at the MacWorld Expo in Boston. One feature of this product is particularly significant: The Application Builder is a selective linker that makes it easy to construct standard, double-clickable Macintosh applications that are practically indistinguishable from applications written in mainstream programming languages such as Pascal and C. While applications written in Scheme tend to be larger than if they were written in Pascal or C, they are not so large as to be outrageous. The smallest complete applications occupy less than 100K bytes on disk. By a selective linker I mean that the Application Builder automatically removes unused code and data from the Scheme library as it builds the application. Selective linking is made possible by the clean design of Scheme, which maintains a rigorous distinction between program and data. It is impossible to write a reliable and effective selective linker for other dialects of Lisp, because they do not maintain this distinction. The Application Builder does permit the use of EVAL and LOAD in an application, but their use defeats selective linking in most cases. MacScheme+Toolsmith Version 1.0 also includes a native code compiler that is almost decent. That is, it is several times faster than previous Lisp compilers for the Macintosh, and is able to bear comparison with the best microcomputer Lisp compilers available. Other notable features of MacScheme+Toolsmith include support for the Macintosh Toolbox traps, a programmable interrupt system, and multitasking. As an author of this system, I am quite proud of it. Since it was made possible by the high quality of the Scheme language itself, it seems only fair that the Scheme community at large should be able to share my joy. Peace, William Clinger  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 12 Aug 87 18:54:35 EDT Received: from relay2.cs.net by RELAY.CS.NET id ac01166; 12 Aug 87 18:39 EDT Received: from tektronix.tek.com by RELAY.CS.NET id aw06697; 12 Aug 87 18:28 EDT Received: by tektronix.TEK.COM (5.51/6.24) id AA19826; Wed, 12 Aug 87 14:13:49 PDT Received: by tekchips.TEK.COM (5.51/6.24) id AA15730; Wed, 12 Aug 87 14:11:57 PDT Message-Id: <8708122111.AA15730@tekchips.TEK.COM> To: scheme@mc.lcs.mit.edu Cc: rrrs-authors@mc.lcs.mit.edu Subject: Gabriel benchmarks in Scheme Date: 12 Aug 87 14:11:55 PDT (Wed) From: willc%tekchips.tek.com@RELAY.CS.NET In the most recent issue of Lisp Pointers, Walter van Roggen asked implementors to send in their most recent timings for the Gabriel benchmarks. I would like to encourage implementors of Scheme to respond to this request. I have recently finished translating the Gabriel benchmarks (except for STAK, which is a test of fluid variables, and FRPOLY, which is written "in a somewhat unpleasant programming style" that is hard to understand or translate) into Scheme. Please let me know if you would like the source code. Some of the benchmarks use property lists; I didn't try to change that, because most implementations can mimic property lists. At least one of them (BROWSE) also assumes that CAR and CDR of the empty list is the empty list; I didn't try to change that either. Otherwise the benchmarks should be reasonably portable. They have been run in MacScheme. I changed the CTAK benchmark, which tested both fluid binding and escapes, into a straight test of CALL-WITH-CURRENT-CONTINUATION. Otherwise the tests measure pretty much the same things in Scheme as they do in Common Lisp. (That's not to say I always understand what they are supposed to measure in Common Lisp.) Because the Gabriel benchmarks do not test first class procedures and do use much tail-recursion, I have added a continuation-passing version of TAK to the Scheme benchmarks. peace, William Clinger Tektronix Computer Research Lab willc%tekchips.tek.com@relay.cs.net  Received: from rand-unix.arpa (TCP 1200600007) by MC.LCS.MIT.EDU 24 Jul 87 12:41:10 EDT Received: by rand-unix.arpa; Fri, 24 Jul 87 08:49:49 PDT Received: from localhost by pluto.arpa; Fri, 24 Jul 87 08:50:34 PDT Message-Id: <8707241550.AA08641@pluto.arpa> To: scheme@mc.lcs.mit.edu, narain%pluto@rand-unix.ARPA Subject: Quotation regarding QUOTE Date: Fri, 24 Jul 87 08:50:31 PDT From: narain%pluto@rand-unix.ARPA In the discussions of QUOTE, it would be useful to keep in mind its origins. Consider the following: In order that constants can always be distinguished from variables however, they will be quoted. That is, a 2-list will be formed whose first element is the keyword QUOTE and whose second element is the constant. Hence the constants 127, NIL, (A B) and X will be represented by the S-expressions (QUOTE 127), (QUOTE NIL), (QUOTE (A B)), (QUOTE X) respectively. There is no exception to this rule: variables are *never* quoted, constants are *always* quoted. Peter Henderson Functional Programming: Application & Implementation Page 97 Note that quotation is hardly required in Prolog since it has another convention for distinguishing variables from constants. Sanjai Narain Rand Corp.  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 24 Jul 87 06:18:06 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA15326; Fri, 24 Jul 87 02:44:52 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 23 Jul 87 12:26:04 GMT From: mcvax!inria!crcge1!adams@seismo.css.gov (Drew Adams) Subject: Re: Recognising QUOTE deemed harmful to EVAL's laziness Message-Id: <2719@crcge1.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu WARNING: Too long (again!) Regarding My Original Posting and Replies: ----------------------------------------- Thanks for the commentaries. I'm sorry my posting wasn't clearer (and shorter). I wish this reply were shorter as well. FIRST, some general remarks aimed to clear up misunderstandings due (I think) to terminology, etc.. 1) By EVAL I mean the LISP (or SCHEME) interpreter itself, as well as explicit calls to the procedure EVAL in the program. Some people quite naturally assumed I mean the latter only, thus wondering about the "relevance to SCHEME (which has no EVAL)". [J. Rees] 2) DELAY/FORCE vs. QUOTE/EVAL: The former are used in eager implementations to simulate (program, implement, etc.) lazy evaluation. E.g., Uday Reddy mentions that "The use of quotation for delayed evaluation is now widely recognized to be misguided. Modern LISPs, such as SCHEME, have constructs like "DELAY" to achieve lazy evaluation." DELAY and FORCE achieve "call-by-name" which is sometimes called "laziness", but they don't usually achieve "*full* laziness", (what Robert Firth called "true laziness" in the original posting), which was the issue under discussion. My point has nothing to do with whether or not people would be better off avoiding QUOTE/EVAL and using DELAY/FORCE. My point is that implicit recognition of quotation by the interpreter (EVAL) gets in the way of *implementing* (in the interpreter) full laziness, as repeated evaluations of the same (quotation) expression *don't* yield the same result. [A. Freeman, U. Reddy] 3) I think the biggest communication problem arose from my not making sufficiently clear that I'm not concerned with differentiating external expressions from internal data structures etc., as well as from the different meanings "expression", "symbol" etc. might have in different communities. I'm ignoring what goes on inside a LISP implementation (data structure representation, binding etc.) completely and am referring only to externally observed behavior as determined by input and output *expressions* (= Sexprs). Thus, when I refer to the "result" or "value" of an expression I by definition mean the printed result. An example of the confusion [U. Reddy]: "Since FOO can never be the normal form value of any expression (if FOO is bound, then its binding is the normal form and, if it is unbound, then it is an error) they print FOO and expect the user to understand it as (QUOTE FOO)." I equate the expression FOO with its binding, as the normal form. If unbound, I consider the expression FOO itself to be the normal form. [J. Rees, A. Freeman, U. Reddy] 4) When I speak of that which is "denoted" by an expression I mean (in LISP) the printed result of the expression, and I equate this with whatever the programmer might have in mind that the expression represents *for her*. Thus, in this view everything is regarded only in its external aspect, as an expression, and all denoted values are themselves expressions. Hence I wrote: "(For simplicity, let's assume denoted values are always expressions; values of the function represented by the functor QUOTE are necessarily so.) An expression then *is* "use" of that expression and a quoted expression is "mentioned" (although the entire quotation itself is "used", the "use" of the functor QUOTE serving to "mention" its argument.) [U. Reddy] 5) When I speak of two expressions being denotationally *equivalent* I thus mean a) they both mean the same thing to the programmer, b) they have the same operational behavior; that is, the function (EVAL, MEANING etc.) which identifies their meanings returns the "same" result for both, c) "same", or "equivalent" *meaning* is operationally determined (defined) by the interpreter's equality predicate itself (EQ, EQUAL, =, etc.) This is why I referred to "equivalent meaning, as determined, or shown, by the operation of the language's equality predicate" and "meaning ... the same as ... as determined by LISP predicates such as EQ and EQUAL" [U. Reddy] 6) Of course LISP may be made lazy, the function MEANING may be programmed in LISP, the LISP evaluator may be rendered QUOTE-less, etc.. My point was rather that a) it's simple to leave quotation recognition out of LISP *to begin with*, b) the result of doing so is a *reduction* engine, no more, no less, c) a function such as MEANING, to perform what I'm calling denotation, is simple to define in a reduction setting, so that LISP's implicit recognition of quotation *isn't necessary* in order to have a useful denotation mechanism, d) without getting rid of LISP's automatic treatment of quotation it's not *simple* (direct, straightforward, etc.) to implement lazy interpretation. [J. Rees, A. Freeman, U. Reddy] SECOND, a few specific comments on some of the replies: To J. REES: ---------- 1) I admit I'm not sure I understand your proposal correctly. I think you mean to (1) keep the standard LISP (or SCHEME) interpreter but replace explicit programmer calls to the procedure EVAL by calls to NORMALIZE. (2) reserve quotation for things that aren't self evaluating (i.e. "things which don't [I assume you mean 'do'] need it") (3) change PRINT a bit so that the printed result of evaluation is always a quotation or a self-evaluating expression I don't see how this provides reduction semantics. Let's leave aside (1) for the moment, assuming nobody explicitly normalizes anything. Here's the original example I gave, with some cosmetic changes to protect the innocent: if the value of FOO is defined to be BAR then (EQUAL 'BAR FOO) is true (T), whereas (EQUAL 'BAR 'FOO) is false (NIL). Thus FOO and (QUOTE FOO) *aren't* equivalent, as determined by EQUAL, yet the former is the result of interpreting the latter. Such an interpretation isn't, therefore, a reduction. Now, let the value of BAR be TOTO. Then, asking for the meaning of the meaning of FOO: (NORMALIZE FOO) gives (QUOTE TOTO). Why not TOTO? I think that you, as well as U. Reddy (see number 3), below) and perhaps others, were aiming at a different kind of denotation mechanism than what I had in mind: one that, instead of just removing a level of "mention", returns a *mention* of the denoted value. Anyway, that's what I understand from your treatment of PRINT, etc.. That's fine too, although in that case I would opt for consistency in the case of numbers, strings, etc. too. Such consistency is important, if not always for users in an interactive setting, at least for *programs* that might manipulate or reason about evaluation results. To U. REDDY: ----------- 1) Here's your "counterexample, assuming FOO is bound to 2 in the context: (QUOTE FOO) -> (QUOTE 2) by innermost reduction But (QUOTE FOO) and (QUOTE 2) are different objects" As mentioned above, I'm using the interpreter's equality predicate (e.g. EQUAL) to measure semantic equivalence. Assuming this, and assuming that we're both talking expression reduction and aren't concerned with LISP "objects" as different from their external Sexprs, I don't agree that the values denoted by (QUOTE FOO) and (QUOTE 2) are different. (EQUAL (QUOTE FOO) (QUOTE 2)) ==> T. Likewise: (EQUAL FOO 2) ==> T. The two quotations "mention" the *same* (as judged by EQUAL) value, which happens to have (at least) two names: FOO and 2. This of course means that reduction rules are not to be used to establish values (in the sense of meanings), but rather equivalences. From the moment that we equate two expressions via a reduction rule we no longer have any external way to distinguish them; we've just declared them to be indistinguishable. This means that if we want to differentiate, we must do it at an external meta-level: *we* (or an external program) can *see* a difference between (QUOTE FOO) and (QUOTE 2). By accepting to recognize such a difference we place ourselves at a meta-level *unknown to the interpreter*. This is not a meta-level *defined* to the interpreter via MEANING. It is not even definable, once we've declared FOO and 2 to be indistinguishable. 2) Regarding (QUOTE FOO) and FOO, you write: "They aren't equivalent. So why say that (QUOTE FOO) denotes FOO?" Would you be happy reading "mentions" for "denotes"? Be happy then; that's what I mean by "denotes". QUOTE mentions and EVAL (or MEANING) returns the value mentioned by a quotation. I say "denotes" because I want to use EVAL/MEANING for other than just quotations. 3) You write: "Since LISP does not have a separate syntax for data objects and programs ..., data objects are treated as "mentions" of S-expressions and programs are treated as "uses" of them." Exactly. This is one of my points, that LISP obliges the programmer to use the *same* mechanism/notation when expressing data structures etc. as when shifting semantic levels. I wrote: "as all computation in LISP is evaluation (in a denotational sense), the programmer is obliged to conceptually move up and down between semantic levels that are essentially artificial in a purely declarative setting. They don't correspond to her conception of the meaning of the program but rather function as an ad hoc mechanism to keep the eagerness of EVAL at bay. She in fact eventually learns to ignore or abstract from them when mentally interpreting code. LISP requires programmers to employ quotation even when it serves no apparent semantic purpose." The last line would be better written "serves a different semantic purpose, if any". 4) You mention that "[normalizers] are inefficient compared to evaluators." How does taking quotation recognition out of pure LISP leave it less efficient? The answer, I suppose, is that some other mechanism must then be found for preventing unintended evaluation. Normal order reduction is an obvious candidate, and is perhaps what you had in mind. It is indeed in general less efficient. But it's not the only mechanism possible. Wouldn't it be desirable to perform strictness analysis to find arguments to be interpreted "by-value"? 5) I wrote: "The quotation mechanism itself may of course be provided quite simply by the general rule: Meaning (Quote x) = x where QUOTE is simply a constructor (undefined symbol). Then: Meaning (Quote -12) ==> -12" You write: "This works only if outermost evaluation is the default (standard) evaluation of the language." I can see why you might say this, considering the confusion over number 1), above. Otherwise, I can't see why this would be true. As reduction is equivalence-preserving, it can't matter where you start reducing, inside, outside, mix and match, .... (excepting, of course, non-terminating interpretation). 6) You write: "It is by no means universally accepted that outermost evaluation as the default is "good", and many people who work with outermost evaluation have reservations about using it as the default." I agree. You and I are both, I believe, two such people. I mention this so folks who aren't familiar with your work may know that you're "lazier" than your reply might indicate. :) ------------- As I'm going on vacation for a month I won't be around to keep up the provocation. I look forward however to seeing how things will turn out. Again, thanks for the comments and sorry about the confusion & length. -- drew -- Drew ADAMS, Laboratoires de Marcoussis, Centre de Recherche de la Compagnie Generale d'Electricite, Route de Nozay, 91460 MARCOUSSIS, FRANCE Tel. 64.49.11.54, adams@crcge1.cge.fr  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 24 Jul 87 06:16:36 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA15302; Fri, 24 Jul 87 02:43:28 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 23 Jul 87 12:23:54 GMT From: mcvax!inria!crcge1!adams@seismo.css.gov (Drew Adams) Subject: Re: Recognising QUOTE deemed harmful to EVAL's laziness Message-Id: <2718@crcge1.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu Further References ------------------ I neglected to mention that the idea that QUOTE is properly treated as a constructor (in a reduction setting) is due to Alan Robinson. Thanks to Jan Prins for reminding me. Here's the paper where he discusses denotation vs. reduction with respect to quote. I don't know of a more recent one. %T New Generation Knowledge Processing %A J. A. ROBINSON %R First Annual Progress Report %I Syracuse University %C Syracuse, New York %D December 1984 That paper introduces the "unknown-tolerant" fully lazy functional logic language SUPER being developed at Syracuse University. The essential reference dealing with the functional basis of SUPER is: %T A Fully Lazy Higher Order Purely Functional Programming Language with Reduction Semantics %A Kevin J. GREENE %I Syracuse University %C Syracuse, New York %D August 1985 %O Ph.D. Thesis Thanks also to Stan Shebs for reminding me of Brian Smith's work on 3-LISP, which (among other things) is another attempt to clean up the semantics of quotation (and more). Here are two accessible references. %T The Implementation of Procedurally Reflective Languages %A Jim des RIVIERES %A Brian Cantwell SMITH %B ACM Symposium on LISP and Functional Programming %C Austin, Texas %I ACM %P 331-347 %D August 6-8, 1984 %T Reflection and Semantics in Lisp %A Brian Cantwell SMITH %B Eleventh Annual ACM Symposium on Principles of Programming Languages (POPL) %C Salt Lake City, Utah %I ACM %P 23-35 %D January 15-18, 1984 In case some who read this didn't see Stan's message, here is part: "His basic point of view is that quoting is important to distinguish levels of meta-ness, and so quoted objects are promoted to first-class types known as handles. There are operations UP and DOWN that add and remove handles, since evaluation does not; (eval '2) => '2. Also, (+ 2 '3) is an semantic error, like taking the car of an number. In other words, Smith also uses an essentially *reducing* EVAL, separating out a separate denotation mechanism. -- Drew ADAMS, Laboratoires de Marcoussis, Centre de Recherche de la Compagnie Generale d'Electricite, Route de Nozay, 91460 MARCOUSSIS, FRANCE Tel. 64.49.11.54, adams@crcge1.cge.fr  Received: from Cs.Ucl.AC.UK (TCP 20012204403) by MC.LCS.MIT.EDU 23 Jul 87 22:57:17 EDT Received: from aiva.edinburgh.ac.uk by nss.Cs.Ucl.AC.UK via Janet with NIFTP id aa21492; 23 Jul 87 22:19 BST From: Jeff Dalton Date: Thu, 23 Jul 87 22:18:07 -0100 Message-Id: <13530.8707232118@aiva.ed.ac.uk> To: scheme@mc.lcs.mit.edu Subject: Recognizing QUOTE deemed harmful to EVAL's laziness > From: Jonathan A Rees > I don't quite see what the big deal is. I agree that reduction is a > somewhat nicer but it doesn't seem to be a very deep question. [...] Well, that depends on whether you're a "purist" or a "pragmatist" (relatively speaking). It's like the debate over the lack of a proper function type in Common Lisp, or the question of whether the need to use FUNCTION around lambda-expressions is or is not a trivial matter of syntax... Well, maybe.  Received: from multimax.ARPA (TCP 30001237416) by MC.LCS.MIT.EDU 23 Jul 87 16:46:09 EDT Received: by multimax.ARPA (4.12/25-eef) id AA06525; Thu, 23 Jul 87 16:38:04 edt Date: Thu, 23 Jul 87 16:38:04 edt From: Dan Pierson Message-Id: <8707232038.AA06525@multimax.ARPA> To: kaplan%kaplan.cs.uiuc.edu@a.cs.uiuc.edu Cc: scheme@mc.lcs.mit.edu In-Reply-To: kaplan%kaplan.cs.uiuc.edu@a.cs.uiuc.edu's message of Thu, 23 Jul 87 14:01:08 mdt <8707232001.AA11840@kaplan.cs.uiuc.edu> Subject: futures in cscheme You need the runtime file "future.scm". A version from an earlier CScheme follows -- I've partially munged it to work with the 5.1 beta release but there appear to be some remaining problems. Please send me back a copy if you get it to work better; I don't have time to work on it right now. I suspect that make-future needs to be changed to use make-cheap-future but I'm not sure... ====================================================================== ; This is -*- SCHEME -*- code (declare (usual-integrations) (compilable-primitive-functions vector-set! get-external-number within-control-point)) (define put-work (make-primitive-procedure 'PUT-WORK)) (define global-interrupt (make-primitive-procedure 'GLOBAL-INTERRUPT)) (define touch (make-primitive-procedure 'TOUCH)) (define set-car-if-eq?! (make-primitive-procedure 'SET-CAR-IF-EQ?!)) (define set-cdr-if-eq?! (make-primitive-procedure 'SET-CDR-IF-EQ?!)) (define vector-set-if-eq?! (make-primitive-procedure 'VECTOR-SET-IF-EQ?!)) (define set-cxr-if-eq?! (make-primitive-procedure 'SET-CXR-IF-EQ?!)) (define future-ref (make-primitive-procedure 'FUTURE-REF)) (define future-set! (make-primitive-procedure 'FUTURE-SET!)) (define future-size (make-primitive-procedure 'FUTURE-SIZE)) (define lock-future! (make-primitive-procedure 'LOCK-FUTURE!)) (define unlock-future! (make-primitive-procedure 'UNLOCK-FUTURE!)) (define non-touching-eq? (make-primitive-procedure 'NON-TOUCHING-EQ?)) (define n-interpreters (make-primitive-procedure 'N-INTERPRETERS)) (define my-processor-number (make-primitive-procedure 'MY-PROCESSOR-NUMBER)) (define my-interpreter-number (make-primitive-procedure 'MY-INTERPRETER-NUMBER)) ;; This is the stuff Anthony put here. ;; (define statistics-package ;; (make-environment ;; (define get-statistics ;; (make-primitive-procedure 'get-statistics #!true)) ;; (define stat-names '((CONTENTION-COUNT . 0) ;; (GC-MASTER-IDLE-TIME . 1) ;; (GC-SLAVE-IDLE-TIME . 2) ;; (GC-LOOP-TIME . 3) ;; (GC-DAEMON-TIME . 4))) ;; (define This-load '()) ;; ;; (define (load-statistics) ;; (set! this-load (get-statistics))) ;; ;; (define (get-statistic name) ;; (if (unassigned? this-load) ;; (load-statistics)) ;; (vector-ref this-load (cdr (assq name stat-names)))) ;; ;; (define (clear-statistics) ;; (set! this-load)))) ;; ;; (define load-statistics (access load-statistics statistics-package)) ;; (define get-statistic (access get-statistic statistics-package)) ;; (define clear-statistics (access clear-statistics statistics-package)) ;; Slots in a future ;; MICROCODE KNOWS ABOUT THESE ;; FUTURE-DETERMINED-SLOT is #!TRUE if the value is known and immutable ;; #!FALSE if not yet know, else known but mutable (i.e. KEEP-SLOT) (define FUTURE-DETERMINED-SLOT 0) ;; FUTURE-LOCK-SLOT is #!TRUE if the future is locked by a process (define FUTURE-LOCK-SLOT 1) ;; The next two are mutually exclusive. The VALUE is used if ;; DETERMINED is not #!FALSE. The QUEUE contains a WEAK queue of ;; processes waiting for a value to appear if DETERMINED is #!FALSE. (define FUTURE-VALUE-SLOT 2) (define FUTURE-QUEUE-SLOT 2) ; REFERENCED ONLY BY THE RUNTIME SYSTEM ;; Code to run to re-activate this process (define FUTURE-PROCESS-SLOT 3) ;; The FUTURE-STATUS-SLOT contains one of: ;; RUNNING: Actually in possession of a processor ;; WAITING: Stopped waiting for the value of a future ;; PAUSED: Stopped by PAUSE-EVERYTHING ;; DELAYED: Created by delay scheduler and not yet run ;; RUNNABLE: Available for execution ;; DETERMINED: Value has been set and process is finished ;; CREATED: Future newly created (define FUTURE-STATUS-SLOT 4) ;; For debugging purposes, the original thunk to be executed. (define FUTURE-ORIG-CODE-SLOT 5) (define FUTURE-PROCESS-PRIVATE-SLOT 6) ;; If this process has status WAITING this is a (strong) list of the ;; futures on which it is waiting. (define FUTURE-WAITING-ON-SLOT 7) ;; For GC metering (not used by simulator) (define FUTURE-METER-SLOT 8) ;; For users: (define FUTURE-USER-SLOT 9) ; Some useful macros for dealing with atomicity. Notice that ;;DEFINE-MACRO happens when the text is turned into code (i.e. ;;at syntax time), while ADD-SYNTAX! happens only when the program ;;is actually executed. So both are used when this file uses the ;;macro, but only ADD-SYNTAX! is used for user macros which ;;are not referenced here. (define-macro (add-syntax! name expander) `(SYNTAX-TABLE-DEFINE SYSTEM-GLOBAL-SYNTAX-TABLE ,name ,expander)) ; ATOMIC takes a list of expression and guarantees that they ;;are done without interrupts. (define-macro (atomic . expressions) `(WITHOUT-INTERRUPTS (LAMBDA () . ,expressions))) (add-syntax! 'ATOMIC (macro expressions `(WITHOUT-INTERRUPTS (LAMBDA () . ,expressions)))) ;; PROG1 is like the MACLISP macro of the same name (define-macro (PROG1 . exprs) `(LET ((FIRST ,(CAR exprs))) ,@(CDR exprs) FIRST)) ; DEFINE-ATOMIC is like the procedural version of DEFINE, except ;;that the body is wrapped in WITHOUT-INTERRUPTS. (define-macro (define-atomic arg-template . body) `(DEFINE ,arg-template (ATOMIC . ,body))) (add-syntax! 'DEFINE-ATOMIC (macro (arg-template . body) `(DEFINE ,arg-template (ATOMIC . ,body)))) ; LOCKING-FUTURE is the same as ATOMIC except that it also wraps ;;a LOCK-FUTURE! and UNLOCK-FUTURE! around the expression(s). ;;LOCKED? is a flag which can be used in BODY -- it will be #!true ;;if the future is still valid (you hang until you can lock it), ;;or #!false if it has been spliced out. (define-macro (LOCKING-FUTURE FUTURE LOCKED? . BODY) `(WITH-FUTURE-LOCKED ,future (LAMBDA (,locked?) . ,body))) (add-syntax! 'LOCKING-FUTURE (macro (FUTURE LOCKED? . BODY) `(WITH-FUTURE-LOCKED ,future (LAMBDA (,locked?) . ,body)))) (define-macro (WITH-STATE STATE . BODY) `(NON-REENTRANT-TASK-CATCH (LAMBDA (,state) . ,body))) (DEFINE-ATOMIC (with-future-locked future thunk) (if (lock-future! future) (let ((result (thunk #!true))) (unlock-future! future) result) (thunk #!false))) (define scheduler (make-environment (declare (usual-integrations) (compilable-primitive-functions (weak-car system-pair-car) (weak-cdr system-pair-cdr) (weak-set-car! system-pair-set-car!) (weak-set-cdr! system-pair-set-cdr!))) (define control-point-type (microcode-type 'CONTROL-POINT)) (define sti (make-primitive-procedure 'setup-timer-interrupt #!true)) (define drain-work-queue! (make-primitive-procedure 'drain-work-queue!)) (define weak-cons-type (microcode-type 'WEAK-CONS)) (define non-reentrant-task-catch) (define task-catch) (define non-reentrant-call/cc (make-primitive-procedure 'non-reentrant-call-with-current-continuation)) (define call/cc (make-primitive-procedure 'call-with-current-continuation)) (define set-current-dynamic-state! (make-primitive-procedure 'set-current-dynamic-state!)) (define catch-maker (access catch-maker continuation-package)) (define current-Future-Vector) ; Process currently running (define the-paused-tasks) ; Tasks being suspended temporarily (define Start-Process) ; Default scheduler for FUTURE creation (define Idle-Future) ; Future to wait until idle on (define discard-the-paused-tasks? #!false) ; Throw away tasks? (define preempting? #!false) ; No timer currently set (define Delta '()) ; Scheduling frequency, centi-seconds (set! non-reentrant-task-catch (catch-maker non-reentrant-call/cc set-current-dynamic-state! #!true)) (set! task-catch (catch-maker call/cc set-current-dynamic-state! #!false)) (define (legitimate-process? object) (or (procedure? object) (primitive-type? control-point-type object))) (DEFINE-ATOMIC (start-preempting interval) (if (not preempting?) (begin (set! timer-interrupt (lambda () (let ((My-Task (Current-Future))) (WITH-STATE me (LOCKING-FUTURE My-Task I-am-running? (if I-am-running? (begin (future-set! My-Task FUTURE-PROCESS-SLOT me) (more-work My-Task)) (begin (stop-preempting) (bkpt "TIMER: Existential crisis!")))) (next))))) (set! preempting? #!true) (set! delta interval) (sti 0 interval)) (display "Already preempting when START-PREEMPTING called"))) (DEFINE-ATOMIC (stop-preempting) (sti '() '()) (set! preempting? #!false)) (define make-future (let ((future-type (microcode-type 'FUTURE))) (named-lambda (make-future orig-code user-procedure name) (primitive-set-type future-type (vector #!false ; DETERMINED: No value yet #!false ; LOCK: Not locked (make-empty-queue) ; VALUE/QUEUE:No waiters orig-code ; PROCESS: How to resume 'CREATED ; STATUS: Ready to go user-procedure ; ORIG_CODE: For debugging (if (unbound? open-console-channel) name (vector (open-console-channel name))) ; PROCESS-PRIVATE: Butterfly?? '() ; WAITING-ON: Not waiting 0 ; METER: Ignored by simulator '()))))) ; USER-SLOT (define (more-work work) (future-set! work FUTURE-STATUS-SLOT 'RUNNABLE) (put-work work) (if (and delta (not preempting?)) (start-preempting delta))) (define spawn-process (let ((make-initial-process (make-primitive-procedure 'make-initial-process))) (named-lambda (spawn-process thunk doc #!optional start) (let ((object) (dynamic-state (current-dynamic-state))) (set! object (make-future (make-initial-process (lambda () (set-current-dynamic-state! dynamic-state) (thunk))) thunk doc)) ((if (unassigned? start) start-process start) object) object)))) (DEFINE-ATOMIC (end-of-computation-handler expression environment value) (let ((me (current-future))) (determine! me value #!false)) (next)) (define (determine! future value #!optional keep-slot?) ;; AWAKEN! is called with a queue (of processes waiting ;; for a future) and promotes them all to runnable status. (define (awaken! queue) (let loop () (if (empty-queue? queue) 'DONE (let ((next-item (dequeue! queue))) (LOCKING-FUTURE next-item item-runnable? (if (and item-runnable? (eq? (future-ref next-item FUTURE-STATUS-SLOT) 'WAITING) (non-touching-memq future (future-ref next-item FUTURE-WAITING-ON-SLOT))) (begin (future-set! next-item FUTURE-WAITING-ON-SLOT future) (more-work next-item)))) (loop))))) (LOCKING-FUTURE future was-still-a-future? (if was-still-a-future? (let ((known? (future-ref future FUTURE-DETERMINED-SLOT)) (waiters (future-ref future FUTURE-QUEUE-SLOT))) (if (eq? known? #!true) (error "Future cannot be determined twice." future)) (future-set! future FUTURE-VALUE-SLOT value) (future-set! future FUTURE-STATUS-SLOT 'DETERMINED) (if (unassigned? keep-slot?) (if (eq? known? #!false) (future-set! future FUTURE-DETERMINED-SLOT #!true)) (future-set! future FUTURE-DETERMINED-SLOT (if keep-slot? 'KEEP-SLOT #!true))) (if (not known?) (awaken! waiters))) (error "Future cannot be determined twice." future))) value) (define (Futures-On?) (not (unassigned? Current-Future-Vector))) (define (Futures-Off) (pause-everything) (set! Current-Future-Vector) 'FUTURES-TURNED-OFF) (define (Current-Future) (if (Futures-On?) (vector-ref Current-Future-Vector (My-Interpreter-Number)) '())) (define (Set-Current-Future! Future) (vector-set! Current-Future-Vector (My-Interpreter-Number) Future)) (define (initialize-scheduler! #!optional interval default-scheduler non-aborting?) (let ((set-fixed-objects-vector! (make-primitive-procedure 'set-fixed-objects-vector!))) (pause-everything) ; Stop all processors & drain queue (let ((termination-handlers (vector-ref (get-fixed-objects-vector) (fixed-objects-vector-slot 'MICROCODE-TERMINATIONS-PROCEDURES)))) (if (= (vector-length termination-handlers) 0) (begin (set! termination-handlers (vector-cons number-of-microcode-terminations '())) (vector-set! (get-fixed-objects-vector) (fixed-objects-vector-slot 'MICROCODE-TERMINATIONS-PROCEDURES) termination-handlers) (set-fixed-objects-vector! (get-fixed-objects-vector)))) (vector-set! termination-handlers (microcode-termination 'END-OF-CONTINUATION) end-of-computation-handler)) (set! Start-Process (if (unassigned? default-scheduler) dfuture-scheduler default-scheduler)) (set! Current-Future-Vector (vector-cons (N-Interpreters) 'NO-FUTURE-YET)) (set! Idle-Future (make-future 'NO-PROCESS 'NO-PROCESS "Idle-Loop")) ;; INITIALIZE-SCHEDULER (futures-on) continues on the next page ;; INITIALIZE-SCHEDULER (futures-on), continued (if (not (unassigned? interval)) (set! delta interval)) (let ((fobj (get-fixed-objects-vector))) (vector-set! fobj (fixed-objects-vector-slot 'SCHEDULER) await-future) (set-fixed-objects-vector! fobj)) (Set-Current-Future! (make-future 'INITIAL-PROCESS 'INITIAL-PROCESS "The Initial Process")) (future-set! (current-future) FUTURE-STATUS-SLOT 'RUNNING) (global-interrupt 1 (lambda (IntCode IntEnb) (set-interrupt-enables! IntEnb) (next)) (lambda () #!true)) (if (or (unbound? abort-to-top-level-driver) (and (not (unassigned? non-aborting?)) non-aborting?)) (or Delta 'NOT-PREEMPTIVE-SCHEDULING) (abort-to-top-level-driver (cond ((unbound? format) "^G to restart the futures") ((not Delta) "^G: no preemptive scheduling") ((negative? Delta) (format () "^G: scheduling ~o.~o~o (real) secs." (quotient (abs Delta) 100) (remainder (quotient (abs Delta) 10) 10) (remainder (remainder (abs Delta) 10) 10))) (else (format () "^G: scheduling ~o.~o~o (runtime) secs." (quotient Delta 100) (remainder (quotient Delta 10) 10) (remainder (remainder Delta 10) 10)))))))) ; Scheduling support (define (next) (let ((get-work (make-primitive-procedure 'get-work))) (Set-Current-Future! 'WAITING-FOR-WORK) (run (get-work (named-lambda (loop) (stop-preempting) (determine! Idle-Future 'DONE) (set! Idle-Future (make-future 'NO-PROCESS 'NO-PROCESS "Idle Loop")) (run (get-work (lambda () (error "No Work Available") (loop))))))))) ;; RUN starts a process running (define (run future) ((LOCKING-FUTURE future Still-A-Future? (if Still-A-Future? (let ((new-process (future-set! future FUTURE-PROCESS-SLOT (My-Interpreter-Number))) (old-status (future-set! future FUTURE-STATUS-SLOT 'RUNNING))) (if (and (legitimate-process? new-process) (eq? old-status 'RUNNABLE)) (begin (Set-Current-Future! future) (if (and delta preempting?) (sti 0 delta)) ; Full time interval (lambda () (new-process 'YOUR-TURN))) (begin (future-set! future FUTURE-STATUS-SLOT old-status) (future-set! future FUTURE-PROCESS-SLOT new-process) next))) next)))) ;; AWAIT-FUTURE suspends the current process and adds it to the ;; queue waiting for the specified future to get a value. The ;; thunk, if specified, is executed immediately before going off for ;; more work to do (i.e. after all of the enqueuing work, etc. is done). (DEFINE-ATOMIC (await-future future #!optional thunk) (WITH-STATE me (let ((perform-normal-return? (LOCKING-FUTURE future waiting-for-a-future? (if (or (not waiting-for-a-future?) ; Already determined (future-ref future FUTURE-DETERMINED-SLOT)) #!TRUE ; Return normally (let ((My-Task (Current-Future)) (status (future-ref future FUTURE-STATUS-SLOT))) (if (or (eq? status 'DELAYED) (eq? status 'PAUSED)) (more-work future)) (LOCKING-FUTURE My-Task I-am-running? (if I-am-running? (begin (future-set! My-Task FUTURE-PROCESS-SLOT me) (future-set! My-Task FUTURE-STATUS-SLOT 'WAITING) (future-set! My-Task FUTURE-WAITING-ON-SLOT (list future)) (enqueue! (future-ref future FUTURE-QUEUE-SLOT) My-Task)) (display "AWAIT-FUTURE: Existential crisis!"))) #!FALSE))))) ; Don't return normally (if (not (unassigned? thunk)) (thunk)) ; Do the optional work (if perform-normal-return? ; Done or find more work (me 'DONE) (next))))) ;; AWAIT-FUTURE-AFTER-ACTION suspends the current process after ;; executing a thunk and adds it to the queue waiting for the ;; specified future to get a value. Its purpose is to ensure ;; that the process is actually on the wait queue of the future ;; when the action takes place. This prevents a race condition ;; which might cause problems if the action is intended to determine ;; the future (e.g., externally) and wake up the process. In other words, ;; if the process has not been added to the wait queue when another ;; process or an external interrupt determines the future, the event ;; would not wake up the process as intended. ;; ;; Since this is rather specialized code (it was added to support ;; the new console i/o system), many safeguards of the normal ;; AWAIT-FUTURE are removed for speed. Normally the future will ;; have been explicitly constructed by the user and is not being ;; determined by any other process. (define (await-future-after-action future action) (await-future future action)) (define await-internal (let ((fall-through-tag (cons 'FALL-THROUGH '()))) (named-lambda (await-internal My-Task futures) (let ((Value-Known? #!false)) (define (announce-value value) (if (not (set! Value-Known? #!true)) (determine! My-Task value))) (define (spawn-processes disjuncts) (if (null? disjuncts) 'DONE (let ((this-future (car disjuncts))) (if (LOCKING-FUTURE this-future really-a-future? (if (and really-a-future? (null? (future-ref this-future FUTURE-DETERMINED-SLOT))) (begin (enqueue! (future-ref this-future FUTURE-QUEUE-SLOT) My-Task) #!true) (begin (announce-value this-future) #!false))) (spawn-processes (cdr disjuncts)))))) (if (eq? fall-through-tag (task-catch (lambda (me) ; Deliberately re-entrant (future-set! My-Task FUTURE-PROCESS-SLOT me) (future-set! My-Task FUTURE-STATUS-SLOT 'WAITING) (future-set! My-Task FUTURE-WAITING-ON-SLOT futures) (spawn-processes futures) fall-through-tag))) My-Task (begin (announce-value (future-ref My-Task FUTURE-WAITING-ON-SLOT)) (next))))))) (define (disjoin . futures) (await-internal (make-future 'DISJOIN 'DISJOIN "Disjoin") futures)) (define (await-first-of futures) (await-internal (make-future 'DISJOIN 'DISJOIN "Disjoin") futures)) ; Special scheduler operations ;; RESCHEDULE allows me to give up my processor slice and ;; wait until the scheduler gets back to me. (define-atomic (reschedule) (let ((my-task (current-future))) (WITH-STATE me (if (LOCKING-FUTURE my-task am-I-running? (if am-I-running? (begin (future-set! my-task FUTURE-PROCESS-SLOT me) (more-work my-task))) am-I-running?) (next) 'NOT-CURRENTLY-RUNNING-A-FUTURE)))) ;; WAIT-UNTIL-IDLE causes a process to just continue ;; going to sleep until there are no other active processes. (define (wait-until-idle) (touch idle-future)) ;; DFUTURE-SCHEDULER is a future creation scheduler which ;; defers the child process and continues on with the parent. ;; Note that all creation schedulers are called as part of ;; the parent process, so this is the easy case. (DEFINE-ATOMIC (dfuture-scheduler future) (more-work future) 'CHILD-QUEUED-FOR-EXECUTION) ;; FUTURE-SCHEDULER is a future creation scheduler which ;; defers the parent process and continues on with the child. ;; This is a little harder than DFUTURE, since it is called ;; running as the parent. (DEFINE-ATOMIC (future-scheduler future) (WITH-STATE parent-process (let ((My-Future (Current-Future))) (LOCKING-FUTURE My-Future Still-Runnable? (if Still-Runnable? (begin (future-set! My-Future FUTURE-PROCESS-SLOT parent-process) (more-work My-Future)))))) (more-work future) (run future)) ;; DELAY-SCHEDULER is a future creation scheduler which defers ;; execution of the newly created future until it is first ;; touched. (DEFINE-ATOMIC (delay-scheduler future) (future-set! future FUTURE-STATUS-SLOT 'DELAYED) 'OK-I-DELAYED-IT) ;; Queue Abstraction ;; ;; ------------------------------- ;; | Tail Pointer | Head Pointer | ;; ------------------------------- ;; | | ;; | | ;; V V ;; ----- ----- ----- ;; | |=|=>| |=|=>| |/| add new items by clobbering '() ;; ----- ----- ----- ;; remove from start of list ;; (The list itself is made from WEAK cons cells) ;; ;; The queue is empty when Tail=Head=#!NULL ;; (thus it has one item when Tail=Head but they are not #!NULL) ;; ;; These operations assume that the caller has arranged for any ;; desired atomicity. (define (weak-cons a b) (system-pair-cons weak-cons-type a b)) (define weak-car system-pair-car) (define weak-cdr system-pair-cdr) (define weak-set-car! system-pair-set-car!) (define weak-set-cdr! system-pair-set-cdr!) (define (make-empty-queue) (cons '() ())) (define queue-head-ptr car) (define queue-tail-ptr cdr) (define set-queue-head-ptr! set-car!) (define set-queue-tail-ptr! set-cdr!) (define (empty-queue? queue) (null? (queue-head-ptr queue))) (define (enqueue! queue object) (if (null? (queue-head-ptr queue)) (begin (set-queue-head-ptr! queue (weak-cons object '())) (set-queue-tail-ptr! queue (queue-head-ptr queue))) (begin (weak-set-cdr! (queue-head-ptr queue) (weak-cons object '())) (set-queue-head-ptr! queue (weak-cdr (queue-head-ptr queue)))))) (define (dequeue! queue) (let ((current-tail (queue-tail-ptr queue))) (if (null? current-tail) (error "Queue empty" queue) (let ((result (weak-car current-tail))) (if (null? (weak-cdr current-tail)) (begin (set-queue-head-ptr! queue '()) (set-queue-tail-ptr! queue '())) (set-queue-tail-ptr! queue (weak-cdr current-tail))) result)))) ;; SAVING-STATE wraps up the current state of the system into the ;; current future and returns it to the work queue. It then executes ;; the thunk. If the current future is invoked the call to ;; SAVING-STATE is exitted; when the thunk returns, the processor will ;; wait for new work to perform. (define (saving-state thunk) (WITH-STATE my-state (let ((my-future (current-future))) (LOCKING-FUTURE my-future am-I-running? (if am-I-running? (begin (future-set! my-future FUTURE-PROCESS-SLOT my-state) (future-set! my-future FUTURE-STATUS-SLOT 'RUNNABLE) (put-work my-future))))) (set-current-future! 'STATE-SAVED) (set! my-state) (within-control-point the-error-continuation (lambda () (thunk) (next)))) 'COMPLETED) ;; PAUSE-EVERYTHING is used to make every processor but the caller ;; save its state and go quiescent. The value returned by ;; Pause-Everything is a procedure which will put the work queue ;; back to its initial state (modulo order of futures on the queue). (DEFINE-ATOMIC (pause-everything) ;; RELEASE-STATE! takes a list of futures and puts them ;; on the work queue. (define (release-state! list) (if (null? list) 'RESTARTED (let ((work-unit (car list))) (LOCKING-FUTURE work-unit work-to-do? (if (and work-to-do? (legitimate-process? (future-ref work-unit FUTURE-PROCESS-SLOT)) (eq? (future-ref work-unit FUTURE-STATUS-SLOT) 'PAUSED)) (more-work work-unit))) (release-state! (cdr list))))) ;; WEAK-LIST->LIST! takes a weak list of futures, as ;; returned by DRAIN-WORK-QUEUE! and converts it to a list of ;; the objects referenced. The GC code needs the weak form, ;; hence the extra work here. In the process, each future is ;; made to be PAUSED so it will automatically resume if touched (define (weak-list->list! weak-list) (let loop ((current weak-list) (result '())) (if (null? current) result (let ((work-unit (weak-car current))) (LOCKING-FUTURE work-unit work-to-do? (if work-to-do? (begin (future-set! work-unit FUTURE-STATUS-SLOT 'PAUSED) (loop (weak-cdr current) (cons work-unit result))) (loop (weak-cdr current) result))))))) (define ((returned-object the-queue) #!optional message) (if (unassigned? message) (set! message 'Restart-tasks)) (cond ((eq? message 'Any-Tasks?) (and (not (eq? the-queue #!true)) (not (null? the-queue)))) ((eq? message 'Restart-tasks) (if (not (eq? the-queue #!true)) (release-state! the-queue) (error "Attempt to re-use a pause object!")) (set! the-queue #!true)) ((eq? message 'The-Tasks) (if (eq? the-queue #!true) '() the-queue)) (else (error "Pause object: strange message" message)))) (if (not (Futures-On?)) (returned-object '()) (let ((save-synch (make-synchronizer)) (drain-synch (make-synchronizer)) (proceed-synch (make-synchronizer))) (stop-preempting) (global-interrupt 1 (lambda (int-code int-mask) (await-synchrony save-synch) (saving-state (lambda () (set-interrupt-enables! int-mask) (await-synchrony drain-synch) (await-synchrony proceed-synch)))) (lambda () #!TRUE)) (await-synchrony save-synch) (await-synchrony drain-synch) (let ((me (current-future)) (the-queue (weak-list->list! (drain-work-queue!)))) (set! Current-Future-Vector (vector-cons (N-Interpreters) 'PAUSED)) (Set-Current-Future! me) (await-synchrony proceed-synch) (returned-object the-queue))))) ;; WITH-TASKS-SUSPENDED executes the thunk with all other processes ;; stopped. It returns the value of the thunk. (define (with-tasks-suspended thunk) (if (not (Futures-On?)) (thunk) (fluid-let ((the-paused-tasks (pause-everything))) (dynamic-wind (lambda () (if (the-paused-tasks 'any-tasks?) (begin (newline) (display "[Suspending tasks]")))) thunk (lambda () (cond ((not (the-paused-tasks 'any-tasks?)) '()) (discard-the-paused-tasks? (newline) (display "[Discarding tasks]") (newline)) (else (newline) (display "[Resuming tasks]") (newline) (the-paused-tasks 'Restart-tasks)))))))) ;; Dealing with recently suspended tasks (define (discard-recently-suspended-tasks!) (set! discard-the-paused-tasks? #!true)) (define (prevent-discarding-processes!) (set! discard-the-paused-tasks? #!false)) ;; Execution within a selected task (define (within-process future thunk) (define (loop noisy?) ((LOCKING-FUTURE future true-future? (if true-future? (let ((status (future-ref future FUTURE-STATUS-SLOT)) (process (future-ref future FUTURE-PROCESS-SLOT))) (cond ((non-touching-eq? future (current-future)) thunk) ((eq? status 'RUNNING) (lambda () (if noisy? (bkpt "WITHIN-PROCESS: process is running")) (loop #!false))) (else (future-set! future FUTURE-PROCESS-SLOT (lambda (arg) (thunk) (process 'go))) (more-work future) (lambda () (run future))))) (begin (error "WITHIN-PROCESS: Not a process" future) (lambda () (next))))))) (loop #!true)) )) ; end of Make-Environment for Scheduler ; Export definitions to the world outside the scheduler (define initialize-scheduler! (access initialize-scheduler! scheduler)) (define determine! (access determine! scheduler)) (define future-scheduler (access future-scheduler scheduler)) (define dfuture-scheduler (access dfuture-scheduler scheduler)) (define delay-scheduler (access delay-scheduler scheduler)) (define next (access reschedule scheduler)) (define wait-until-idle (access wait-until-idle scheduler)) (define pause-everything (access pause-everything scheduler)) (define with-tasks-suspended (access with-tasks-suspended scheduler)) (define discard-recently-suspended-tasks! (access discard-recently-suspended-tasks! scheduler)) (define prevent-discarding-processes! (access prevent-discarding-processes! scheduler)) (define Current-Future (access Current-Future scheduler)) (define Futures-On? (access Futures-On? scheduler)) (define Futures-Off (access Futures-Off scheduler)) (define Saving-State (access Saving-State scheduler)) (define within-process (access within-process scheduler)) (define Disjoin (access disjoin scheduler)) (define Await-First-Of (access await-first-of scheduler)) (define (futures-on #!optional slice) (if (unassigned? slice) (set! slice '())) (initialize-scheduler! slice dfuture-scheduler)) (define (non-touching-memq element list) (cond ((null? list) #!false) ((non-touching-eq? element (car list)) list) (else (non-touching-memq element (cdr list))))) (define (non-touching-assq element list) (cond ((null? list) #!false) ((non-touching-eq? element (caar list)) (car list)) (else (non-touching-assq element (cdr list))))) (add-syntax! 'future (macro (expression #!optional doc user-scheduler) `((ACCESS SPAWN-PROCESS SCHEDULER) (LAMBDA () ,expression) ; Work to do ,(if (unassigned? doc) ; Documentation (with-output-to-string (lambda () (display expression))) doc) ,@(if (unassigned? user-scheduler) ; Start-up procedure '() `(,user-scheduler))))) (futures-on)  Received: from a.cs.uiuc.edu (TCP 1200600045) by MC.LCS.MIT.EDU 23 Jul 87 15:02:02 EDT Received: from kaplan.cs.uiuc.edu by a.cs.uiuc.edu with SMTP (UIUC-5.52/9.7) id AA03824; Thu, 23 Jul 87 14:02:15 CDT Received: by kaplan.cs.uiuc.edu (7.1/9.7) id AA11840; Thu, 23 Jul 87 14:01:08 mdt Date: Thu, 23 Jul 87 14:01:08 mdt From: kaplan%kaplan.cs.uiuc.edu@a.cs.uiuc.edu Message-Id: <8707232001.AA11840@kaplan.cs.uiuc.edu> To: scheme@mc.lcs.mit.edu Subject: futures in cscheme I have decided to play with the experimental futures system that comes along with mit scheme. Unfortunately there is no documentation and the various primitives do not seem to behave the way the are described in Halstead's Multilisp paper (they are also named differently which I guess means they are meant to be different!!). There seem to be two primitives that do stuff to make processes, MAKE-INITIAL-PROCESS and MAKE-CHEAP-FUTURE. I can pass make-initial-process a thunk and make that run, which works as the comments in future.c seem to imply (I have only tried this with simple thunks like (lambda () (display 'fish))) Make-cheap-future requires 3 arguments, "orig" "user-code" and "name". I guess that the second is a thunk for the code of the future but cannot figure out the other 2. I have tried silly values like 0 and 'a and that seems to allow make-cheap-future to return a thing which returns TRUE in response to the (future?) operator. But now i dont know how to use this future at all. Help!! can anyone help me??? Has anyone got some documentation on futures or some sample code I could look at? Thanks, Simon Kaplan (kaplan@a.cs.uiuc.edu) ps: If it makes a difference I am running an hp9000/s320.  Received: from b.cs.uiuc.edu (TCP 30001242402) by MC.LCS.MIT.EDU 23 Jul 87 12:40:50 EDT Received: by b.cs.uiuc.edu (UIUC-5.52/9.7) id AA19593; Thu, 23 Jul 87 11:38:42 CDT Date: Thu, 23 Jul 87 11:38:42 CDT From: reddy@b.cs.uiuc.edu (Uday S. Reddy) Message-Id: <8707231638.AA19593@b.cs.uiuc.edu> To: mike%acorn@oak.lcs.mit.edu Cc: scheme@mc.lcs.mit.edu In-Reply-To: mike%acorn@oak.lcs.mit.edu's message of Thu, 23 Jul 87 10:49 est <8707231551.AA18446@b.cs.uiuc.edu> Subject: Recognizing QUOTE deemed harmful to EVAL's laziness In Scheme or Lisp, you need a more powerful notion of Normal Form than in a language without meta-language operations. ..... ........ . This avoids the problem of reexamining expressions and thereby confusing a symbolic value with an expression in the language. Of course all this goes out the window if you allow a program to call the interpreter,... i.e., EVAL. ...mike beckerle Precisely. Expressions ARE "symbolic values" (though not all symbolic values are well-formed expressions). I don't see this as a "confusion". It is quite legitimate use of a language. I can't think of any consistent interpretation of "normal form" by which you can say that (QUOTE FOO) normalizes to FOO. FOO is a symbolic value, and (QUOTE FOO) is the way you express it in the language. When Lisp prints answers, it prints the symbolic values rather than the way they should be expressed in the language. Hence, the outermost QUOTE gets eaten. Uday Reddy reddy@a.cs.uiuc.edu  Received: from LIVE-OAK.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 23 JUL 87 11:50:26 EDT Received: from ACORN.Gold-Hill.DialNet.Symbolics.COM by MIT-LIVE-OAK.DialNet.Symbolics.COM via DIAL with SMTP id 52718; 23 Jul 87 11:43:28-EDT Received: from BOSTON.Gold-Hill.DialNet.Symbolics.COM by ACORN.Gold-Hill.DialNet.Symbolics.COM via CHAOS with CHAOS-MAIL id 76014; Thu 23-Jul-87 10:44:26-EDT Date: Thu, 23 Jul 87 10:49 est From: mike%acorn@oak.lcs.mit.edu To: reddy@b.cs.uiuc.edu (Uday S. Reddy) Subject: Recognizing QUOTE deemed harmful to EVAL's laziness Reply-to: mike%acorn@oak.lcs.mit.edu Cc: scheme@mc.lcs.mit.edu, Date: Wed, 22 Jul 87 13:51:44 CDT From: reddy@b.cs.uiuc.edu (Uday S. Reddy) I too am quite perplexed by Drew's essay............ Amen. .................... Since FOO can never be the normal form value of any expression (if FOO is bound, then its binding is the normal form and, if it is unbound, then it is an error) they print FOO and expect the user to understand it as (QUOTE FOO). I mostly agree with Uday's point. I'd like only to comment on the use of the term "normal form" in programming language analysis. In Scheme or Lisp, you need a more powerful notion of Normal Form than in a language without meta-language operations. Vanilla expression rewriting cannot handle languages where the space of values which cannot be rewritten by any rules (call them denotations, values, etc) overlaps with those that can be. (call them expressions, programs, etc.) Context is needed to distinguish when rewriting should continue and when it should halt. Lisp-like languages with quote have this property, in that an expression can evaluate or be reduced to a value which is indistinguishable from an expression, except that in context, it is not intended for re-evaluation, but as an "answer". (QUOTE FOO) denotes the value FOO, a symbol, not the expression FOO a variable. No further evaluation is done on this value, no matter what the context is. Hence, (QUOTE FOO) never has anything to do with any value that the expression FOO (a variable) may have. In Scheme or Lisp interpreters, this distinction between a symbol or S-expression as a value, and as an expression is maintained by using applicative (inner most) evaluation order. This avoids the problem of reexamining expressions and thereby confusing a symbolic value with an expression in the language. Of course all this goes out the window if you allow a program to call the interpreter,... i.e., EVAL. ...mike beckerle  Received: from b.cs.uiuc.edu (TCP 30001242402) by MC.LCS.MIT.EDU 22 Jul 87 15:36:39 EDT Received: by b.cs.uiuc.edu (UIUC-5.52/9.7) id AA05068; Wed, 22 Jul 87 13:51:44 CDT Date: Wed, 22 Jul 87 13:51:44 CDT From: reddy@b.cs.uiuc.edu (Uday S. Reddy) Message-Id: <8707221851.AA05068@b.cs.uiuc.edu> To: mcvax!inria!crcge1!adams@seismo.css.gov Cc: scheme@mc.lcs.mit.edu, fp@yale.arpa In-Reply-To: (Drew Adams's message of 21 Jul 87 09:45:43 GMT <2698@crcge1.UUCP> Subject: Recognizing QUOTE deemed harmful to EVAL's laziness I too am quite perplexed by Drew's essay. I would only add one change to the argument: full laziness lends itself most naturally not to applicative (functional) languages in general but, more precisely, to those respecting "*reduction* semantics". In particular, the purely functional language "pure LISP" (without side effects but with built-in quotation) does *not* respect such semantics and is thus not easily made (fully) lazy. The issue is quotation. Without its built-in recognition of quotation LISP otherwise has reduction as its operational semantics. To be "applicative" or "purely" functional a language must be "referentially transparent", meaning that the same expression, in the same definitional context, is always evaluated to the same result. Pure LISP has this property. I don't see how. A counterexample, assuming FOO is bound to 2 in the context: (QUOTE FOO) -> (QUOTE 2) by innermost reduction But (QUOTE FOO) and (QUOTE 2) are different objects. Indeed, the term "referential transparency" was coined by logicians precisely to distinguish between things like (QUOTE FOO) and FOO. (QUOTE FOO) "mentions" FOO, whereas FOO (or (+ FOO 1)) "uses" it. Referential opacity is not necessarily bad. It is bad only if it is ambiguous whether a particular occurrence of a symbol denotes a "mention" of it, or a "use" of it. The point of QUOTE is precisely to eliminate any such ambiguity, by distinguishing mentions from uses. The reduction I showed above is thus invalid, because (QUOTE FOO) clearly means a mention of FOO, so I can't replace FOO by something equivalent to it. The LISP expression (QUOTE FOO) might be said in a sense to denote the expression (value) FOO to which it evaluates, but the two aren't equivalent; Precisely. They aren't equivalent. So, why say that (QUOTE FOO) denotes FOO? The confusion is probably caused by the fact that a Lisp interpreter prints FOO rather than (QUOTE FOO) when we type in (QUOTE FOO). I do wish Lisp interpreters didn't do that. They should print (QUOTE FOO) to be precise. But, they print FOO for the sake of convenience, I presume. Since FOO can never be the normal form value of any expression (if FOO is bound, then its binding is the normal form and, if it is unbound, then it is an error) they print FOO and expect the user to understand it as (QUOTE FOO). Having such a denotation mechanism available in a language facilitates a leveled view of things. However, it would seem that most programmer use of quotation in LISP doesn't really involve intentional semantic leveling. The most frequent uses of quotation in LISP would appear to be: * to prevent the attempted evaluation of something which is undefined, together with the ensuing error treatment * to prevent the immediate evaluation of a defined expression because the moment isn't right. The most common use of quotation is merely to denote data objects. Since Lisp does not have a separate syntax for data objects and programs (which many Lispers consider to be an asset), data objects are treated as "mentions" of S-expressions and programs are treated as "uses" of them. This is one way of doing it. There are other ways, of course. Prolog uses different syntax for atoms and variables. Pascal and ML use declarations for atoms and constructors. Using a normalizer instead of an evaluator (which Drew mentions later) is another way. But, there are strong arguments against normalizers. Firstly, they are inefficient compared to evaluators. Secondly, when there is an error it is better to tell the user about it immediately rather than printing a large expression and expecting the user to search for the erroneous application in it. The use of quotation for delayed evaluation is now widely recognized to be misguided. Modern Lisps, such as Scheme, have constructs like "delay" to achieve lazy evaluation. Likewise, it would seem that in our daily reasoning we are rarely conscious of using more than few semantic levels at once. Nevertheless, there *are* times when a device for manipulating programmer-defined levels of denotation is useful. Implementation/ manipulation of languages is a typical example where quotation is appropriate. As such leveling is a very powerful abstraction construct, it would be desirable not to have to do without denotation in opting for reduction semantics. One would like to be able to define meta-meta-levels, and so on. Fortunately it's easy to have our cake and eat it too in a reduction-only setting by simply programming quotation/denotation *explicitly* for use just where we need it. But suppose now that for a given application a programmer wants to consider that the true meaning of -12 is, say, the object represented by the expression OVERDRAWN. It's straightforward to define a function MEANING which will perform such an EVALuation. Such a MEANING function can be defined in any Lisp as well. (It is no different from any other function). If such a MEANING function differes from the standard meaning in minor ways, then Lisp allows you to share it by calling EVAL from your MEANING function. If you indeed want to use the standard meaning it should not be necessary to write a brand new interpreter. The quotation mechanism itself may of course be provided quite simply by the general rule: Meaning (Quote x) = x where QUOTE is simply a constructor (undefined symbol). Then: Meaning (Quote -12) ==> -12 This works only if outermost evaluation is the default (standard) evaluation of the language. All Lisps use innermost evaluation (though other modes of evaluation are provided by constructs like "delay", "freeze" and "future"), so this trick does not work. It is by no means universally accepted that outermost evaluation as the default is "good", and many people who work with outermost evaluation have reservations about using it as the default. Drew ADAMS, Laboratoires de Marcoussis, Centre de Recherche de la Compagnie Generale d'Electricite, Route de Nozay, 91460 MARCOUSSIS, FRANCE Tel. 64.49.11.54, adams@crcge1.cge.fr In summary, I can see no difference between "applicative semantics" and "reduction semantics". The question of referential transparency is orthogonal to applicative semantics. I believe Drew's comments are largely motivated by the minor misuse of notation by Lisp interpreters in not printing the outermost QUOTE. Uday Reddy reddy@a.cs.uiuc.edu  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 21 Jul 87 22:47:43 EDT Date: Tue, 21 Jul 87 22:48:18 EDT From: Jonathan A Rees Subject: Recognizing QUOTE deemed harmful to EVAL's laziness To: mcvax!inria!crcge1!adams@SEISMO.CSS.GOV cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of 21 Jul 87 09:45:43 GMT from mcvax!inria!crcge1!adams at seismo.css.gov (Drew Adams) Message-ID: <230562.870721.JAR@AI.AI.MIT.EDU> I don't quite see what the big deal is. I agree that reduction is a somewhat nicer but it doesn't seem to be a very deep question. Consider a language which is identical to Lisp (or Scheme) with the following exceptions: - There is no EVAL. Instead, there is a procedure NORMALIZE which could be defined as (define (normalize x environment) (object->expression (eval x environment))) (define (object->expression x) (cond ((or (number? x) (char? x) (string? x) (boolean? x)) x) (else `',x))) - The "datum" in (QUOTE datum) must not be "self-evaluating". (I.e. reserve ' for use by things which don't need it. You don't write numbers in Pascal using "...", do you? Why do the analogous thing in Lisp?) - PRINT writes out an expression that evaluates to the object, if possible. E.g. (PRINT 'FOO) would write the characters 'FOO. There's no semantic difference between this language and Lisp, only trivial differences in the runtime library. But it would appear to have so-called "reduction semantics", wouldn't it? So what's the big deal? The nature of the runtime library (EVAL, PRINT, etc.) is orthogonal to the question of laziness; a lazy Lisp would work just fine. What is the relevance to Scheme (which has no EVAL), by the way? [Please note: Drew Adams' message, to which this is a reply, contains the line "Sender: scheme-request at mc.lcs.mit.edu" in its header. The header lies; the message was NOT sent by scheme-request. I think this is some kind of Unixoid kludge inserted automatically by a mail system somewhere between inria and MC.]  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 21 Jul 87 17:44:14 EDT Received: by ucbvax.Berkeley.EDU (5.58/1.27) id AA12424; Tue, 21 Jul 87 12:48:01 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 21 Jul 87 09:45:43 GMT From: mcvax!inria!crcge1!adams@seismo.css.gov (Drew Adams) Subject: Recognizing QUOTE deemed harmful to EVAL's laziness Message-Id: <2698@crcge1.UUCP> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu WARNING: This is a bit long In article 444 of comp.lang.misc Robert Firth writes: ... In applicative languages, repeated evaluations of an expression always yield the same result, so we can replace delayed evaluation by true lazy evaluation, ie evaluate once only when first referenced. ... SUMMARY: I agree, but argue that this is not true of all applicative languages; in particular, it's not true of pure LISP, due to its treatment of quotation. The meaning of the term "lazy evaluation" is not universally agreed upon. Some use it to mean "call-by-need", i.e. the one-shot evaluation referred to above. Others identify it with "call-by-name" (or "normal order reduction" in the context of the lambda calculus and combinatory logic.) "True" call-by-need is now more commonly termed "fully lazy reduction" in functional programming circles. Henderson & Morris and Friedman & Wise are usually credited with the introduction of "lazy evaluation". I believe Wadsworth was the first to speak of "call-by-need" and in any case he was the first to point out the delicacies of "full laziness", although I believe the latter term is due to Hughes. The concepts of different evaluation orders are of course much older than these terms, predating the electronic computer age [Church, Curry, Rosser]. The simple argument given above by Firth bears repeating and is the basis for the assertion that "lazy evaluation and side effects don't mix" (cf. Abelson & Sussman). I would only add one change to the argument: full laziness lends itself most naturally not to applicative (functional) languages in general but, more precisely, to those respecting "*reduction* semantics". In particular, the purely functional language "pure LISP" (without side effects but with built-in quotation) does *not* respect such semantics and is thus not easily made (fully) lazy. The issue is quotation. Without its built-in recognition of quotation LISP otherwise has reduction as its operational semantics. To be "applicative" or "purely" functional a language must be "referentially transparent", meaning that the same expression, in the same definitional context, is always evaluated to the same result. Pure LISP has this property. "Reduction semantics" refers to the property of always being able to replace an expression by its result, in the same definitional context, without altering the result of the overall computation. Because of this property, an expression and its reduction may thus be said to "*denote* equivalent values". The property which Mr. Firth referred to above, of obtaining the same result no matter how many times an expression is evaluated, is implied by reduction semantics, but not, I believe, by the semantics of pure LISP. Of course, due to the possibility of side effects, in *impure* LISP, re-interpretation of even the *same* code may produce different results. Here, however, the issue is *repeated* interpretation of code -- not that original source code is interpreted more than once, but that the *result* of interpretation is then interpreted and possibly re-interpreted .... Once *reduction* of an expression is started we can assume that it proceeds all the way to some kind of an irreducible (normal) form, so that further attempts at reduction have no effect. In lazy functional languages this final form is not usually "*the* normal form" of the lambda calculus in which no redexes (reducible subexpressions) appear, but the so-called "weak head", or "lazy" normal form, in which only the outermost function application need be irreducible. In reduction-based languages intermediate forms aren't normally even available to the programmer. This is not a problem semantically; one never need worry about reduction having "gone too far", because the intermediate, as well as initial and normal forms, may all be seen as equivalent. I don't know what (pure) LISP's operational semantics should be called. If it weren't already in use we might consider the term "denotational" to characterise its *operational* semantics, since the built-in recognition of quotation provides the ability to distinguish *different levels* of representation of meaning. The LISP expression (QUOTE FOO) might be said in a sense to denote the expression (value) FOO to which it evaluates, but the two aren't equivalent; i.e. there are many contexts in which one can't be replaced by the other without changing the overall meaning and result. For example, if the value of FOO is defined to be 2 then (NUMBERP FOO) is true (T), whereas (NUMBERP (QUOTE FOO)) is false (NIL). (For simplicity, let's assume denoted values are always expressions; values of the function represented by the functor QUOTE are necessarily so.) In a reduction-based language, if A is defined as B, and B as C, reducing A gives C, and all three may be said to have equivalent meaning, as determined, or shown, by the operation of the language's equality predicate. In LISP on the other hand, if A is defined to have the value B, and B to have the value C, evaluating A gives B, not C. This behavior is due to the recognition of QUOTE. The meaning of A isn't necessarily the same as that of B, let alone that of C, as determined by LISP predicates such as EQ and EQUAL. Denotation, unlike reduction, is leveled: A may denote B which denotes C..., but we need not (indeed had better not) assume this means, e.g., that A denotes C. Thus, if A (LISP-) evaluates to B, and (independently) B evaluates to C, we can assume neither that A is equivalent to C, nor that A denotes C. (In this case, the fact that evaluation of A stops at B means that (QUOTE B) was necessarily encountered during the evaluation of A.) Having such a denotation mechanism available in a language facilitates a leveled view of things. However, it would seem that most programmer use of quotation in LISP doesn't really involve intentional semantic leveling. The most frequent uses of quotation in LISP would appear to be: * to prevent the attempted evaluation of something which is undefined, together with the ensuing error treatment * to prevent the immediate evaluation of a defined expression because the moment isn't right. The first of these is by definition unnecessary in a language "tolerant of the undefined". By this I mean that undefined expressions are simply regarded as irreducible (in normal form) and provoke no error treatment. (By "undefined expression" I mean an expression matching no definition left hand side.) Most "rewriting systems" are so tolerant; most functional languages are not, although many permit the declaration of constructions. The second common use of LISP quotation may be motivated by concerns of correctness, as well as efficiency. The correctness concern is due to the fact that replacing an expression by its value doesn't, in general, preserve semantic equivalence, as was indicated above. Besides the special treatment of quotations, this is due to the non-declarative nature of (impure) LISP. The efficiency concern is due to the "eager" (non-lazy) nature of LISP. Even if it would not be incorrect in a given situation to evaluate certain expressions, it may be advisable on efficiency grounds to postpone their evaluation, perhaps indefinitely. Reduction semantics dispense with the first of these concerns, and lazy interpretation (*normal order* reduction) may be used to alleviate the second: subexpressions of an interpreted expression are not necessarily reduced. In LISP, for example, one often places oneself at a meta-level to construct some code which is passed around and manipulated, and then at an opportune moment is executed. In a lazy language such code need not be treated as quotation: as long as its interpretation isn't needed by the functions which pass it around it won't be reduced. Even without laziness, as long as the code is underdefined little or no reduction can take place, so that code may be constructed directly without it needing to pass through a phase where it takes on the form of a construction such as a list. (A function application may be underdefined either because all its arguments are not yet present ("partial parameterization") or because no definition for it has yet been interpreted.) In other words, QUOTE is mainly used by LISP programmers to offset the eagerness of EVAL. If one weren't afraid of throwing oil on forscoming lithpian flames (this one can feel the heat already) one *might* argue that, as all computation in LISP is evaluation (in a denotational sense), the programmer is obliged to conceptually move up and down between semantic levels that are essentially artificial in a purely declarative setting. They don't correspond to her conception of the meaning of the program but rather function as an ad hoc mechanism to keep the eagerness of EVAL at bay. She in fact eventually learns to ignore or abstract from them when mentally interpreting code. LISP requires programmers to employ quotation even when it serves no apparent semantic purpose. (Such overuse would of course be greatly reduced were programmers not obliged to consider also the side effects and referential opacity of (impure) LISP.) (Cf. Wadler) Likewise, it would seem that in our daily reasoning we are rarely conscious of using more than few semantic levels at once. Nevertheless, there *are* times when a device for manipulating programmer-defined levels of denotation is useful. Implementation/ manipulation of languages is a typical example where quotation is appropriate. As such leveling is a very powerful abstraction construct, it would be desirable not to have to do without denotation in opting for reduction semantics. One would like to be able to define meta-meta-levels, and so on. Fortunately it's easy to have our cake and eat it too in a reduction-only setting by simply programming quotation/denotation *explicitly* for use just where we need it. Consider the hypothetical question "What is the denotation of ((3 - 7) + (4 / 2)) * 6 ?". A reduction interpreter is only in effect able to respond "It's the denotation of -12, whatever that may be". But suppose now that for a given application a programmer wants to consider that the true meaning of -12 is, say, the object represented by the expression OVERDRAWN. It's straightforward to define a function MEANING which will perform such an EVALuation. (Function application is represented here by juxtaposition: Sin 3.14159, not sin(3.14159)): Meaning -12 = Overdrawn Suppose now that OVERDRAWN in turn is defined (though its *meaning* is not): Overdrawn = More-debits-than-credits where the right hand side is simply an undefined term. If this is the case then the original request is reduced as follows: Meaning (((3 - 7) + (4 / 2)) * 6) ==> Meaning -12 ==> Overdrawn ==> More-debits-than-credits Of course, this result has nothing to do, a priori, with the *meaning* of the expression OVERDRAWN. The latter (which is the same as the *meaning of the meaning* of the expression -12) might be defined: Meaning More-debits-than-credits = Spendthrift Assuming, again, that the right hand side is undefined, we have: Meaning Overdrawn ==> Meaning More-debits-than-credits ==> Spendthrift Such a simple denotational mechanism makes no assumption about the meanings of constructions (undefined terms) such as, e.g., that they denote themselves. In this it is a more flexible device than that provided by LISP's EVAL. If 5 is a construction, then, although 5 *reduces* to itself (i.e. is irreducible), the MEANING of 5 is not 5 (or anything else) by default, nor are we prohibited from defining it to be 6. This is a good reminder that denotational evaluation need not be equivalence-preserving. For, while in our own eyes and the eyes of a function such as MEANING we may identify, say, 2 and 3 by defining their MEANINGs to both be, say, 7, or RHUBARB, or whatever, this equivalence is fictive as far as the interpreter is concerned. Then: ((Meaning 2) = (Meaning 3)) ==> True, whereas (2 = 3) ==> False. More importantly, it is not even operationally possible for us to assign two expressions which have the same normal form, such as (2 + 2) and 4, different meanings. The quotation mechanism itself may of course be provided quite simply by the general rule: Meaning (Quote x) = x where QUOTE is simply a constructor (undefined symbol). Then: Meaning (Quote -12) ==> -12 Note incidentally that we are of course in no way limited to a single MEANING function, but may easily define as many different denotations as we like. Likewise it might sometimes be useful to have various quoting constructors. Such constructors are in effect used to establish different denotational levels (meta, meta-meta, etc.), and having different such quoting devices would allow different meaning functions to move differently among the various levels, even with respect to the same argument expression. Similarly, a given meaning function might recognize more than one form of quotation. E.g., My-meaning (My-quote x) = x Your-meaning (Your-quote x) = x Your-meaning (My-quote x) = Nonsense! Then, for example: My-meaning (My-quote Foo) ==> Foo Your-meaning (My-quote Foo) ==> Nonsense! My-meaning (Your-quote Foo) ==> My-meaning (Your-quote Foo) [already in normal form] To recapitulate, the argument I have with (pure) LISP's EVAL (leaving aside side effects and eagerness) is not that it is denotational, but that it's recognition of quotation is omnipresent. It is as though LISP were a reduction interpreter that automatically provided a function such as MEANING, respecting quotation, with every prompt. That is, one might say that every expression FOO evaluated by LISP is first regarded as (MEANING FOO), and is then reduced. It is difficult in general to ask LISP for a simpler version of the same expression; EVAL looks for meaning behind each input. In a reduction setting on the other hand, denotational evaluation is still available, using only the mechanism of reduction, just by defining explicit denotation functions such as MEANING. References: ========== Laziness: -------- %T A Lazy Evaluator %A Peter HENDERSON %A James H. MORRIS, Jr. %B Third Annual ACM Symposium on Principles of Programming Languages (POPL) %P 95-103 %I ACM %D January 1976 %T CONS Should Not Evaluate its Arguments %A Daniel P. FRIEDMAN %A David S. WISE %J Automata, Languages and Programming: Third Int'l Coll. %P 257-284 %E S. MICHAELSON and R. MILNER %I Edinburgh University Press %D July 1976 %T Structure and Interpretation of Computer Programs %A Harold ABELSON %A Gerald Jay SUSSMAN %A Julie SUSSMAN %I The MIT Press and McGraw-Hill %C Cambridge, Massachusetts, and New York %D 1985 "Full" laziness: --------------- %T Semantics and Pragmatics of the Lambda-calculus %A Christopher Peter WADSWORTH %I Oxford University %D September 1971 %O Ph.D. Thesis %T Design and Implementation of Programming Languages %A Robert John Muir HUGHES %R Technical Monograph PRG-40 %I Oxford University Computing Laboratory, Programming Research Group %C Oxford %D July 1983, as monograph September 1984 %O Ph.D. Thesis Reduction: --------- %T The Calculi of Lambda-Conversion %A Alonzo CHURCH %J Annals Math. Studies %V 6 %I Princeton University Press %C Princeton, New Jersey %D 1941 %T Combinatory Logic %A Haskell B. CURRY %A Robert FEYS %A William CRAIG %V 1 %I North-Holland %C Amsterdam %D 1968 %T Highlights of the History of the Lambda Calculus %A J. Barkley ROSSER %J Annals of the History of Computing %V 6 %N 4 %P 337-349 %I American Federation of Information Processing Societies %D October 1984 Quotation: --------- %T A Critique of Abelson and Sussman - or - Why Calculating is Better Than Scheming %A Philip WADLER %J SIGPLAN Notices %V 22 %N 3 %P 83-94 %I ACM %D March 1987 -- Drew ADAMS, Laboratoires de Marcoussis, Centre de Recherche de la Compagnie Generale d'Electricite, Route de Nozay, 91460 MARCOUSSIS, FRANCE Tel. 64.49.11.54, adams@crcge1.cge.fr  Received: from mitre-bedford.ARPA (TCP 3200600102) by MC.LCS.MIT.EDU 6 Jul 87 08:18:34 EDT Posted-From: The MITRE Corp., Bedford, MA Received: from darwin.sun.uucp by linus.research (3.2/4.7) id AA14571; Mon, 6 Jul 87 08:16:05 EDT Posted-Date: Mon, 6 Jul 87 08:15:48 EDT Received: by darwin.sun.uucp (3.2/SMI-3.0DEV3) id AA06559; Mon, 6 Jul 87 08:15:48 EDT Date: Mon, 6 Jul 87 08:15:48 EDT From: ramsdell%linus@mitre-bedford.ARPA Message-Id: <8707061215.AA06559@darwin.sun.uucp> To: scheme@mc.lcs.mit.edu Subject: Tigger on Scheme ------------ Forwarded from the MilneNet ------------- Posted-Date: Mon, 6 Jul 87 07:46:39 EDT Date: Mon, 6 Jul 87 07:46:39 EDT From: Tigger@Hundred-Acre-Woods.Milne To: ramsdell@linus.uucp Subject: Scheme The wonderful thing about Scheme is: Scheme is a wonderful thing. Complex procedural ideas Are expressed via simple strings. It's clear semantics, and lack of pedantics, Help make programs run, run, RUN! But the most wonderful thing about Scheme is: Programming in it is fun, Programming in it is FUN!  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 1 Jul 87 13:25:23 EDT Date: Wed, 1 Jul 87 13:28:04 EDT From: Jonathan A Rees Subject: test message, ignore To: scheme@MC.LCS.MIT.EDU Reply-to: scheme-request@mc.lcs.mit.edu Message-ID: <222143.870701.JAR@AI.AI.MIT.EDU> I periodically send out a test message to the list, for two purposes: (a) it verifies to new arrivals that they have been added, (b) it helps weed out bad addresses, since copies sent to such bounce back to me. There are about 200 entries on my list, many of which are redistribution lists, so I'd estimate the readership to be about 400-600 (probably a low estimate since I think it goes out to uucp netnews, and Allah knows what happens to it then).  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 18 Jun 87 07:49:08 EDT Received: by ucbvax.Berkeley.EDU (5.57/1.26) id AA13845; Thu, 18 Jun 87 04:23:44 PDT Received: from USENET by ucbvax.Berkeley.EDU with netnews for scheme@mc.lcs.mit.edu (scheme@mc.lcs.mit.edu) (contact usenet@ucbvax.Berkeley.EDU if you have questions) Date: 18 Jun 87 03:03:11 GMT From: super.upenn.edu!linc.cis.upenn.edu!sherin@RUTGERS.EDU (Steve Sherin) Organization: University of Pennsylvania Subject: SCOOPS newsgroup? RSVP Message-Id: <1363@super.upenn.edu.upenn.edu> Sender: scheme-request@mc.lcs.mit.edu To: scheme@mc.lcs.mit.edu It has been suggested that there is enough interest (and postings) to have an autonomous SCOOPS newgroup. I would like to here from those who want sucha b-board. I'll gladly moderate it and post various fixes/programs to go along with SCOOPS. I have spoken with the creator of SCOOPS, and he has said that he also will particpate in some of the discussions. Please mail directly to me at sherin@linc.cis.upenn.edu. I apologize to those of you who have been bothered in any way by these postings, but I ahd no other reasonable way of reaching everyone concerned (as requests are still coming in from people who've just heard about the availability of the sources). Thank you.  Received: from MITVMA.MIT.EDU (TCP 2227000003) by MC.LCS.MIT.EDU 15 Jun 87 12:52:29 EDT Received: from FRSAC11(NETWORK) by MITVMA (Mailer X1.23) id 3420; Mon, 15 Jun 87 12:06:35 EDT Date: Mon, 15 Jun 87 10:55:03 GMT To: scheme@mc.lcs.MIT.EDU From: NETWORK@FRSAC11.BITNET Subject: Books on Scheme Date: 15 June 1987, 10:50:42 GMT From: NETWORK at FRSAC11 To: SCHEME at MC.LCS I have heard lately about a book by Kent Dybvig, called "The scheme programming language". Anybody on the net can give me exact references ? (I need the editor, and may be the price to order it.) Any other book on Scheme ? Jean-Pierre H. Dumas network@frsac11 (bitnet) network%frsac11.bitnet@wiscvm.wisc.edu (arpanet) ..!ihnp4!frsac11.bitnet!network (usenet ?) dumas@sumex-aim.stanford.edu (arpanet)  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 14 Jun 87 12:40:30 EDT Received: by linc.cis.upenn.edu id AA11801; Sun, 14 Jun 87 12:37:00 EDT Date: Sun, 14 Jun 87 12:37:00 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Sun, 14 Jun 87 12:37:00 EDT Message-Id: <8706141637.AA11801@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: SCOOPS bug-fixes 5/24/87--METHODS.SCM: In the define-methods macro > ,formal-list < was changed to > ',formal-list < to enable methods with parameters. >>Steve Sherin 5/25/87 In the file INSTANCE.SCM: (define-macro (%sc-compile-class class) ... ) has been changed to (define (%sc-compile-class class) (begin (%inherit-method-vars class) (eval (%make-template (%sc-name class) class) user-initial-environment))) This made sure classes always compile in the user-initial-environment. >>Steve Sherin 5/25/87 ======= In methods.scm: (syntax-table-define ... 'define-macro ...) was modified to (syntax-table-define system-global-syntax-table 'define-method (macro e (let ((class-name (caar e)) (method-name (cadar e)) (formal-list (cadr e)) (body (cddr e))) `(%sc-class-add-method ',class-name ',method-name ',class-name ',class-name (append (list 'lambda ',formal-list) ',body) (lambda (env quoted-val) (let* ((method-name ',method-name) (temp `(in-package ,env (define ,method-name ,quoted-val)))) (eval temp (the-environment))) ))))) Change enabled methods with multiple expressions within the main lambda. >>Steve Sherin 6/6/87 In INTERF.SCM: changed (empty-slot? (lambda (form) (not (eval form (the-environment))))) to (empty-slot? (lambda (form) (cond ((symbol? form) #f) ((eq? form #f) #t) (else #f)))) Hence, "no more functions" for an active-value set- or get- method is specified by a CONSTANT value for the false value. The change provides the ability to use forward references to methods as yet undefined when active values are declared. (Thanks Eric.) NB This code does NOT check for the symbol >> false << as it is not used in r3rs and can be modified as any other variable. >> Steve Sherin 6/13/87 Send.scm was rewritten, correcting the following: Errors during the use of send, send-if-handles now do not mess up the interpreter. Circularly sent messages are now allowed. >> Steve Sherin ----------------------------------------------------------------- Here's the new version of send.scm: ----------------Cut here.---------------------------------------- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; ;;; ;;; S c o o p s ;;; ;;; ;;; ;;; ;;; ;;; Rewritten 5/20/87 for cscheme ;;; ;;; by Steve Sherin--U of P ;;; ;;; File : send.scm ;;; ;;; ;;; ;;; Amitabh Srivastava ;;; ;;; ;;; ;;;-----------------------------------------------------------------;;; ;;; One does not have to use the SEND form to invoke methods ;;; ;;; in the same class; they can be invoked as Scheme functions. ;;; ;;; ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; send (syntax-table-define system-global-syntax-table 'send (macro e (let ((args (cddr e)) (msg (cadr e)) (obj (car e))) `(let* ((set-parent! (access system-environment-set-parent! environment-package)) (ep environment-parent) (ibot ,obj) (itop (ep (ep ibot))) (ipar (ep itop)) (class (access %sc-class ibot)) (ctop (%sc-class-env class)) (cpar (ep ctop)) (cbot (%sc-method-env class)) (instance-safe? (eq? ipar cbot))) (without-interrupts (lambda () (dynamic-wind (lambda () (set-parent! ctop ibot) (if instance-safe? (set-parent! itop cpar))) (lambda () (in-package cbot (,msg ,@args))) (lambda () (set-parent! ctop cpar) (set-parent! itop cbot)) ))))))) ;;; send-if-handles (syntax-table-define system-global-syntax-table 'send-if-handles (macro e (let ((obj (car e)) (msg (cadr e)) (args (cddr e))) `(let ((self ,obj)) (if (assq ',msg (%sc-method-structure (access %sc-class self))) (send self ,msg ,@args) #!false)))))  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 12 Jun 87 13:35:43 EDT Date: Fri, 12 Jun 87 13:32:18 EDT From: Chris Hanson Subject: Compiling Scheme on a hp200 To: ucdavis!iris!windley@UCBVAX.BERKELEY.EDU cc: scheme@MC.LCS.MIT.EDU, bug-cscheme@OZ.AI.MIT.EDU In-reply-to: Msg of Thu 11 Jun 87 17:04:49 pdt from ucdavis!iris!windley at ucbvax.Berkeley.EDU (Phil Windley) Message-ID: <213574.870612.CPH@AI.AI.MIT.EDU> Date: Thu, 11 Jun 87 17:04:49 pdt From: ucdavis!iris!windley at ucbvax.Berkeley.EDU (Phil Windley) I ftp'd dist.tar yesterday and it compiled fine for a vax, but on the hp200, it has a few problems. It seems that it wants to assemble a file called cmp68020.s, the hp200 has a 68010. I changed the switch in the make file, but it still wants that code. What is it supposed to do? It chokes when it starts to assemble the 68020 code. Phillip J. Windley Robotics Research Laboratory University of California, Davis Please do not send bug messages about MIT CScheme to this mailing list. As we specify in the file README in the distribution, such messages should be sent to "bug-cscheme%oz@mc.lcs.mit.edu". The "scheme" mailing list is a general discussion list for all issues about Scheme. In reply to your bug report, please delete the various "Compiled code interface files" in "Makefile.200" and replace them with the commented-out information ("compiler.c", "compiler.oo", etc). This code is not 68020-specific and should work fine for you.  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 11 Jun 87 20:52:32 EDT Received: by ucbvax.Berkeley.EDU (5.57/1.25) id AA06798; Thu, 11 Jun 87 17:49:42 PDT Received: by ucdavis.ucdavis.edu (5.51/UCD1.38) id AA28247; Thu, 11 Jun 87 17:05:24 PDT Received: by clover.ucdavis.edu.ucdavis.edu (5.51/4.7) id AA04759; Thu, 11 Jun 87 17:02:42 PDT Return-Path: Received: by iris.ucdavis.edu (4.12/3.14) id AA22532; Thu, 11 Jun 87 17:04:49 pdt Date: Thu, 11 Jun 87 17:04:49 pdt From: ucdavis!iris!windley@ucbvax.Berkeley.EDU (Phil Windley) Message-Id: <8706120004.AA22532@iris.ucdavis.edu> Qotw: To iterate is human, to recurse devine. To: scheme@mc.lcs.mit.edu Subject: Compiling Scheme on a hp200 I ftp'd dist.tar yesterday and it compiled fine for a vax, but on the hp200, it has a few problems. It seems that it wants to assemble a file called cmp68020.s, the hp200 has a 68010. I changed the switch in the make file, but it still wants that code. What is it supposed to do? It chokes when it starts to assemble the 68020 code. Phillip J. Windley Robotics Research Laboratory University of California, Davis  Received: from ucbvax.Berkeley.EDU (TCP 1200400116) by MC.LCS.MIT.EDU 9 Jun 87 18:43:48 EDT Received: by ucbvax.Berkeley.EDU (5.57/1.25) id AA17803; Tue, 9 Jun 87 15:41:23 PDT Received: by ucdavis.ucdavis.edu (5.51/UCD1.38) id AA11202; Tue, 9 Jun 87 15:05:01 PDT Received: by clover.ucdavis.edu.ucdavis.edu (5.51/4.7) id AA06925; Tue, 9 Jun 87 15:02:22 PDT Return-Path: Received: by iris.ucdavis.edu (4.12/3.14) id AA29091; Tue, 9 Jun 87 15:04:15 pdt Date: Tue, 9 Jun 87 15:04:15 pdt From: ucdavis!iris!windley@ucbvax.Berkeley.EDU (Phil Windley) Message-Id: <8706092204.AA29091@iris.ucdavis.edu> Qotw: To iterate is human, to recurse devine. To: scheme@mc.lcs.mit.edu Subject: Scheme Source I'm trying to get ahold of Scheme for a VAX for use at UC Davis. We want to use Sussman and Abelson in an introductory CS class, but the version of scheme we have (scheme.84.7) doesn't seem to be compatible with the examples in the book. How can I get a tape? Phillip Windley Robotic Research Lab University of California, Davis  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 7 Jun 87 00:04:58 EDT Received: by linc.cis.upenn.edu id AA26642; Sun, 7 Jun 87 00:02:28 EDT Date: Sun, 7 Jun 87 00:02:28 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Sun, 7 Jun 87 00:02:28 EDT Message-Id: <8706070402.AA26642@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: scoops--bug fixes 6/6 5/24/87--METHODS.SCM: In the define-methods macro > ,formal-list < was changed to > ',formal-list < to enable methods with parameters. >>Steve Sherin 5/25/87 In the file INSTANCE.SCM: (define-macro (%sc-compile-class class) ... ) has been changed to (define (%sc-compile-class class) (begin (%inherit-method-vars class) (eval (%make-template (%sc-name class) class) user-initial-environment))) This made sure classes always compile in the user-initial-environment. >>Steve Sherin 5/25/87 ======= In methods.scm: (syntax-table-define ... 'define-macro ...) was modified to (syntax-table-define system-global-syntax-table 'define-method (macro e (let ((class-name (caar e)) (method-name (cadar e)) (formal-list (cadr e)) (body (cddr e))) `(%sc-class-add-method ',class-name ',method-name ',class-name ',class-name (append (list 'lambda ',formal-list) ',body) (lambda (env quoted-val) (let* ((method-name ',method-name) (temp `(in-package ,env (define ,method-name ,quoted-val)))) (eval temp (the-environment))) ))))) Change enabled methods with multiple expressions within the main lambda. >>Steve Sherin 6/6/87 In INTERF.SCM: changed (empty-slot? (lambda (form) (not (eval form (the-environment))))) to (empty-slot? (lambda (form) (cond ((symbol? form) #f) ((eq? form #f) #t) (else #f)))) Hence, "no more functions" for an active-value set- or get- method is specified by a CONSTANT value for the false value. The change provides the ability to use forward references to methods as yet undefined when active values are declared. (Thanks Eric.) NB This code does NOT check for the symbol >> false << as it is not used in r3rs and can be modified as any other variable. >> Steve Sherin  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 5 Jun 87 19:08:02 EDT Received: by linc.cis.upenn.edu id AA21524; Fri, 5 Jun 87 19:05:31 EDT Date: Fri, 5 Jun 87 19:05:31 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Fri, 5 Jun 87 19:05:31 EDT Message-Id: <8706052305.AA21524@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: error handler for cscheme (MIT) My preceding message was wrt Cscheme from MIT. I'm running a beta version of #5. Thanks, Steve sherin@linc.cis.upenn.edu  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 5 Jun 87 10:00:14 EDT Date: Fri, 5 Jun 87 10:00:55 EDT From: "Jonathan A. Rees" Subject: message passing To: sherin@LINC.CIS.UPENN.EDU cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Thu 4 Jun 87 23:26:27 EDT from sherin at linc.cis.upenn.edu (Steve Sherin) Message-ID: <210298.870605.JAR@AI.AI.MIT.EDU> Your question about error handlers is apparently specific to PC Scheme (it's hard to tell), since Scheme per se has no standard error handling system (yet). I would like to remind everyone on this list that discussion that is specific to one implementation (there are at least six different implementations) should, if possible, be conducted on an appropriate forum, not here. However, I don't know what mailing lists (if any) exist for most of the implementations, including PC Scheme, MacScheme, or chez scheme. If there are such mailing lists, could someone please announce them? If not, then for the time being, I suppose this list is as good a place as any for discussion -- I don't mean to restrict information flow, just to make it more efficient -- but could someone out there consider creating such lists? At the very least, if your message *does* concern a particular implementation, please state which one at the very beginning of the message, so that users of other implementations can determine quickly that your message does not concern them. The particular lists I do know about are: info-cscheme%oz@mc.lcs.mit.edu (send mail to info-cscheme-request%oz@mc.lcs.mit.edu to be added) t-discussion@yale.arpa (send mail to t-discussion-request@mc.lcs.mit.edu to be added) Thanks -- the management  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 4 Jun 87 23:28:45 EDT Received: by linc.cis.upenn.edu id AA15206; Thu, 4 Jun 87 23:26:27 EDT Date: Thu, 4 Jun 87 23:26:27 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Thu, 4 Jun 87 23:26:27 EDT Message-Id: <8706050326.AA15206@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: error-handler I want to know how to interface to the error-handler so that I can fix/sneak past certain errors sometimes. The chief use for the technique is to protect the interpreter from hanging while manipulating environment parents with scoops system code. Currently, an unbound variable error during a call to send can be very messy. THANKS, Steve Sherin U of P Philadelphia, PA ARPA: sherin@linc.cis.upenn.edu  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 3 Jun 87 19:18:39 EDT Date: Wed, 3 Jun 87 19:19:09 EDT From: Chris Hanson Subject: Edwin source To: RMACHUCA@SIMTEL20.ARPA cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Wed 3 Jun 87 11:39:22 MDT from Raul Machuca Message-ID: <209337.870603.CPH@AI.AI.MIT.EDU> Date: Wed, 3 Jun 87 11:39:22 MDT From: Raul Machuca Is the Scheme source code for Edwin available from any one on this list or any other source. There are two versions of Edwin, the one running in TI PC Scheme, and the one running in MIT 68000 Scheme. The former is available by FTP from host prep.ai.mit.edu as one of the following files: /u2/cph/tiedwin.tar tar format file of source code /u2/cph/tiedwin.tar.Z compressed version of above /u2/cph/tiedwin.lst `pr' style listing of source code The MIT Scheme version of Edwin can be obtained by special arrangement with me. Sometime in early fall this version will have been ported to MIT C Scheme and will be a part of the normal distribution.  Received: from SIMTEL20.ARPA (TCP 3200000112) by MC.LCS.MIT.EDU 3 Jun 87 13:50:42 EDT Date: Wed, 3 Jun 87 11:39:22 MDT From: Raul Machuca Subject: Edwin source To: scheme@MC.LCS.MIT.EDU Message-ID: <12307591509.21.RMACHUCA@SIMTEL20.ARPA> Is the Scheme source code for Edwin available from any one on this list or any other source. -------  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 26 May 87 16:41:53 EDT Received: from relay2.cs.net by RELAY.CS.NET id aa23017; 26 May 87 16:07 EDT Received: from tektronix.tek.com by RELAY.CS.NET id au03093; 26 May 87 16:02 EDT Received: by tektronix.TEK.COM (5.51/6.21) id AA07988; Tue, 26 May 87 10:54:47 PDT Received: by albatross.USS.TEK.COM (3.2/6.19) id AA05828; Tue, 26 May 87 10:54:38 PDT Message-Id: <8705261754.AA05828@albatross.USS.TEK.COM> To: scheme@mc.lcs.mit.edu From: postmaster <@RELAY.CS.NET,@tektronix.tek.com:postmaster@tektronix.tek.com> Subject: Forwarded Mail Date: 26 May 87 10:54:36 PDT (Tue) Sender: janeta%albatross.uss.tek.com@RELAY.CS.NET You message was interrupted at tektronix, due to a temporary problem. Sorry, for the inconvenience, Jan Acker ------- Forwarded Message From: MAILER-DAEMON@tektronix.TEK.COM (Mail Delivery Subsystem) Date: Fri, 22 May 87 09:11:51 PDT To: mmdf@tektronix Subject: Returned mail: Unable to deliver mail ----- Transcript of session follows ----- 554 mmdf... Recipient names must be specified ----- Unsent message follows ----- Received: by tektronix.TEK.COM (5.51/6.21) id AA17113; Fri, 22 May 87 09:11:51 PDT Message-Id: <8705221611.AA17113@tektronix.TEK.COM> Received: from csnet-relay by .TEK.COM id af16738; 22 May 87 8:53 PDT Received: from relay.cs.net by RELAY.CS.NET id am07904; 22 May 87 10:42 EDT Received: from mc.lcs.mit.edu by RELAY.CS.NET id aa20788; 22 May 87 10:42 EDT Received: from MIT-Multics.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 22 May 87 10 :22:40 EDT Received: from FRSAC11(NETWORK) by MITVMA (Mailer X1.23) id 0285; Fri, 22 May 87 10:17:43 EDT Date: Fri, 22 May 87 16:05:28 GMT To: scheme@mc.lcs.mit.edu From: NETWORK@frsac11.bitnet Subject: CScheme Rel 5 Date: 22 May 1987, 15:56:41 GMT From: NETWORK at FRSAC11 To: SCHEME at MC.LCS MIT Scheme Rel 5 is available only by FTP, and I suppose it is a big file. A suggestion: send it to SIMTEL20.ARPA, they have the previous version as PD:scheme.tar, a file of over 3 megabytes, but being on this server, anybody from ARPA or BITNET etc... can get it. If some kind soul want to do it, talk to Tom Harrison UNIX-SW-REQUEST@SIMTEL20 . A lot easier than making tapes!!! P.S. I can FTP the thing, to bring it to my computer would cost me several hundred dollars in communication cost... Sincerly, Jean-Pierre H. Dumas network@frsac11 (bitnet) network%frsac11.bitnet@wiscvm.wisc.edu (arpanet) ..!ihnp4!frsac11.bitnet!network (usenet ?) dumas@sumex-aim.stanford.edu (arpanet) ------- End of Forwarded Message  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 25 May 87 11:48:39 EDT Received: by linc.cis.upenn.edu id AA18602; Mon, 25 May 87 02:09:13 EDT Date: Mon, 25 May 87 02:09:13 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Mon, 25 May 87 02:09:13 EDT Message-Id: <8705250609.AA18602@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: scoops bug found 5/24/87--METHODS.SCM: In the define-methods macro > ,formal-list < was changed to > ',formal-list < to enable methods with parameters. >>Steve Sherin 5/25/87 In the file INSTANCE.SCM: (define-macro (%sc-compile-class class) ... ) has been changed to (define (%sc-compile-class class) (begin (%inherit-method-vars class) (eval (%make-template (%sc-name class) class) user-initial-environment))) This made sure classes always compile in the user-initial-environment. >>Steve Sherin I will continue to post bug fixes as they are found and maintain a list in ~ftp/pub/scoops on linc@cis.upenn.edu. Steve  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 24 May 87 01:52:22 EDT Received: by linc.cis.upenn.edu id AA13233; Sun, 24 May 87 01:51:22 EDT Date: Sun, 24 May 87 01:51:22 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Sun, 24 May 87 01:51:22 EDT Message-Id: <8705240551.AA13233@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: Scoops bug fix 5/24/87--METHODS.SCM: In the define-methods macro > ,formal-list < was changed to > ',formal-list < to enable methods with parameters. >>Steve Sherin ;;Here's a little test file: ;;; Stacks with Scoops--Steve Sherin (define-class stack (instvars the-stack) (options inittable-variables gettable-variables settable-variables)) (define-method (stack push) (value) (set! the-stack (cons value the-stack))) (define-method (stack tos) () (if the-stack (car the-stack))) (define-method (stack pop) () (if the-stack (let ((top (tos))) (set! the-stack (cdr the-stack)) top))) ;;Steve ;; sherin@linc.cis.upenn.edu  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 22 May 87 12:31:46 EDT Date: Fri, 22 May 87 12:16:58 EDT From: Chris Hanson Subject: CScheme Rel 5 To: "NETWORK@FRSAC11.BITNET"@AI.AI.MIT.EDU cc: scheme@MC.LCS.MIT.EDU, info-cscheme%oz@MC.LCS.MIT.EDU In-reply-to: Msg of Fri 22 May 87 16:05:28 GMT from NETWORK at FRSAC11.BITNET Message-ID: <204092.870522.CPH@AI.AI.MIT.EDU> Date: Fri, 22 May 87 16:05:28 GMT From: NETWORK at FRSAC11.BITNET To: scheme at mc.lcs.MIT.EDU Re: CScheme Rel 5 MIT Scheme Rel 5 is available only by FTP, and I suppose it is a big file. A suggestion: send it to SIMTEL20.ARPA, they have the previous version as PD:scheme.tar, a file of over 3 megabytes, but being on this server, anybody from ARPA or BITNET etc... can get it. Please don't send mail regarding MIT C Scheme to this list. Send it to info-cscheme%oz@mc instead. If you or anyone else wants to be on this list, send a request to info-cscheme-request%oz@mc. This is not a good time to move a copy of Rel 5 since it is in beta test and we are about to release it for real. Keep posted on the info-cscheme list for details.  Received: from MIT-Multics.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 22 May 87 10:22:40 EDT Received: from FRSAC11(NETWORK) by MITVMA (Mailer X1.23) id 0285; Fri, 22 May 87 10:17:43 EDT Date: Fri, 22 May 87 16:05:28 GMT To: scheme@mc.lcs.MIT.EDU From: NETWORK@FRSAC11.BITNET Subject: CScheme Rel 5 Date: 22 May 1987, 15:56:41 GMT From: NETWORK at FRSAC11 To: SCHEME at MC.LCS MIT Scheme Rel 5 is available only by FTP, and I suppose it is a big file. A suggestion: send it to SIMTEL20.ARPA, they have the previous version as PD:scheme.tar, a file of over 3 megabytes, but being on this server, anybody from ARPA or BITNET etc... can get it. If some kind soul want to do it, talk to Tom Harrison UNIX-SW-REQUEST@SIMTEL20 . A lot easier than making tapes!!! P.S. I can FTP the thing, to bring it to my computer would cost me several hundred dollars in communication cost... Sincerly, Jean-Pierre H. Dumas network@frsac11 (bitnet) network%frsac11.bitnet@wiscvm.wisc.edu (arpanet) ..!ihnp4!frsac11.bitnet!network (usenet ?) dumas@sumex-aim.stanford.edu (arpanet)  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 22 May 87 02:08:02 EDT Received: by linc.cis.upenn.edu id AA15633; Fri, 22 May 87 02:07:26 EDT Date: Fri, 22 May 87 02:07:26 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Fri, 22 May 87 02:07:26 EDT Message-Id: <8705220607.AA15633@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: Getting scoops... (Please give arpa pathway back.) I am having trouble reaching wu and munnari!cidam.oz!mg@seismo.css.gov Please send your ARPA addresses so I can send you scoops. Also, indicate whether or not you'd like the Texas Instruments originals in addition. Any suggestions are welcomed. If you don't get a reply, keep psending mail. I'll try to be quick about it as I want SCOOPS to be distributed to everyone that wants it. There is a slight conversion to run if using an older version of cscheme, but that should be minor (and is in the README! file). Steve sherin@linc.cis.upenn.edu  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 22 May 87 00:47:58 EDT Received: by linc.cis.upenn.edu id AA15207; Fri, 22 May 87 00:47:15 EDT Date: Fri, 22 May 87 00:47:15 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Fri, 22 May 87 00:47:15 EDT Message-Id: <8705220447.AA15207@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu I am having trouble reaching wu and munnari!cidam.oz!mg@seismo.css.gov Please send your ARPA addresses so I can send you scoops. Also, indicate whether or not you'd like the Texas Instruments originals in addition. Any suggestions are welcomed. If you don't get a reply, keep psending mail. I'll try to be quick about it as I want SCOOPS to be distributed to everyone that wants it. There is a slight conversion to run if using an older version of cscheme, but that should be minor (and is in the README! file). Steve sherin@linc.cis.upenn.edu  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 21 May 87 11:51:12 EDT Received: by linc.cis.upenn.edu id AA09027; Thu, 21 May 87 11:50:39 EDT Date: Thu, 21 May 87 11:50:39 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Thu, 21 May 87 11:50:39 EDT Message-Id: <8705211550.AA09027@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu My apologees to those who couldn't access SCOOPS. It has been copied to ~ftp/pub/scoops (pub/scoops when ftp'ing anonymously). Happy hunting! PS Please let me know about software developed with SCOOPS. Steve sherin@linc.cis.upenn.edu ============================================================================ "Every passing hour brings the Solar System forty-three miles closer to Globular Cluster M13 in Hercules--and still there are some misfits who insist that there is no such thing as progress." --Ransom K. Ferm preface to Vonnegut's _Sirens of Titan I received requests from seismo and netnorth. I was unable to send mail to those places. If you need the SCOOPS files mailedŠ to you, please indicate exactly how to mail them from this arpanet site. You can use wiscvm.wisc.edu as my site extension. Thanks, Steve sherin@linc.cis.upenn.edu  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 20 May 87 22:44:28 EDT Received: by linc.cis.upenn.edu id AA04490; Wed, 20 May 87 22:43:59 EDT Date: Wed, 20 May 87 22:43:59 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Wed, 20 May 87 22:43:59 EDT Message-Id: <8705210243.AA04490@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu ************************************************************************* Just when you thought you could sleep at night... Just when you thought you were some from unidentified flyin' objects... SCOOPS arives. YEAH!! HOORAY!! ************************************************************************* SCOOPS is an object-oriented system developed for TI Scheme. It has been fully ported (as far as I can tell) to cscheme, and it runs under the new cscheme5 beta release. I have written a small doc file (not very stylish, but hopefully of assistance). All the files are available by ftp'ing to linc.cis.upenn.edu and going to /usr/users/sherin/scoops . The originals are also there in a subdirectory. The file scoops.scm is the fully functional file--just a copy of the individual files needed for SCOOPS. Please help yourselves. Anyone with difficulty getting the data should send me e-mail. Enjoy it, Steve ============================================================================= sherin@linc.cis.upenn.edu  Received: from A.ISI.EDU (TCP 3200600147) by MC.LCS.MIT.EDU 14 May 87 15:18:11 EDT Date: 14 May 1987 15:13:37 EDT Subject: Scheme for lisp machines From: Morris Katz To: scheme@MC.LCS.MIT.EDU Does anyone know of any versions of scheme for either Symbolics or TI Lisp machines. Any info would be greatly appreciated. Morry Katz mkatz@a.isi.edu -------  Received: from A.ISI.EDU (TCP 3200600147) by MC.LCS.MIT.EDU 9 May 87 14:52:03 EDT Date: 9 May 1987 14:50-EDT Sender: VERACSD@A.ISI.EDU Subject: Re: Engine operating system (long msg) From: VERACSD@A.ISI.EDU To: cth@IUCS.CS.INDIANA.EDU Cc: scheme@MC.LCS.MIT.EDU Message-ID: <[A.ISI.EDU] 9-May-87 14:50:30.VERACSD> In-Reply-To: The message of Wed, 29 Apr 87 12:59:28 est from Chris Haynes Chris, Thanks very much for sharing your Scheme code to simulate concurrency. This is very useful to me. (Your operating systems classes are extremely fortunate. ) Cris Kobryn VERACSD.CK@A.ISI.EDU  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 30 Apr 87 22:25:25 EDT Received: by linc.cis.upenn.edu id AA00580; Thu, 30 Apr 87 22:23:34 EDT Date: Thu, 30 Apr 87 22:23:34 EDT From: sherin@linc.cis.upenn.edu (Steve Sherin) Posted-Date: Thu, 30 Apr 87 22:23:34 EDT Message-Id: <8705010223.AA00580@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu Subject: environment networks I need to know how I might sandwich an arbitrary environment between two another environments dynamically. I am presently finishing up the translation of TI's SCOOPS object oriented programming system, and I want to eliminate code walk-throughs entirely. Being able to let a class environment point to the instance variables in another environment is desirable. I think the cleanest way to do that is by changing the parent of the class environment during the run of the program. Please send any suggestions/solutions to sherin@linc.cis.upenn.edu.arpa Thanks.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 30 Apr 87 18:51:54 EDT Received: from relay2.cs.net by RELAY.CS.NET id aa12445; 30 Apr 87 18:44 EDT Received: from tektronix.tek.com by RELAY.CS.NET id ab16539; 30 Apr 87 18:39 EDT Received: by tektronix.TEK.COM (5.51/6.20) id AA25359; Thu, 30 Apr 87 13:16:32 PDT Received: by tekchips.TEK.COM (5.31/6.19) id AA15776; Thu, 30 Apr 87 13:17:27 PDT Message-Id: <8704302017.AA15776@tekchips.TEK.COM> To: Scheme@MC.LCS.MIT.EDU Subject: another set of primitives for concurrency Date: 30 Apr 87 13:17:25 PDT (Thu) From: willc%tekchips.tek.com@RELAY.CS.NET For comparison with Chris Haynes's posting of the Scheme engine operating system, here is a quick description of the concurrency primitives used in MacScheme+Toolsmith. They aren't as useful as engines for writing a metacircular interpreter, however. To use the concurrency features, you have to say (begin-tasking) You can say (end-tasking) to disable scheduling. The END-TASKING procedure doesn't kill any tasks, so you can resume scheduling by calling BEGIN-TASKING again. A RESET will kill all tasks and disable tasking. If an error occurs, tasking continues while you're in the debugger, but if you quit out of the debugger (instead of fixing the error and resuming) then a RESET will be performed. If a task reads from the keyboard when no characters are available, a task switch occurs so another task can run while the one is waiting for input. Tasks with time on their hands, such as a background task that is monitoring the position of the mouse, can call (surrender-timeslice) to let some other task do something productive in the meantime. The approximate size of a time slice is determined by a global variable. Tasks are created and run by (start-task ) The is called with no arguments and runs as a concurrent task. The value returned by START-TASK is a task object. The task object dies when returns, or when someone calls KILL-TASKS on it: (kill-tasks ...) or when the task calls KILL-CURRENT-TASK. If all tasks die, then a RESET is performed. There is no hierarchy of tasks. Thus killing a task does not kill tasks created by that task. Synchronization is performed using side effects and (call-without-interrupts ) which calls as an atomic action. The atomic action ends when returns. Interrupts are also executed uninterruptibly (with certain exceptions, such as when the debugger is called as the result of an error). The interrupt system is programmable, with dynamically installed handlers written in Scheme, but that's another discussion. The main use of interrupts is to implement interactive objects such as windows as part of the Macintosh user interface. Scheme source for the task scheduler and interrupt system is supplied with MacScheme+Toolsmith. Peace, William Clinger  Received: from iucs.cs.indiana.edu (TCP 30003147315) by MC.LCS.MIT.EDU 29 Apr 87 14:04:41 EDT Date: Wed, 29 Apr 87 12:59:28 est From: Chris Haynes To: veracsd.ck@a.isi.edu Cc: scheme@mc.lcs.mit.edu Subject: Engine operating system (long msg) /* ---------- "Concurrency in Scheme" ---------- */ From: VERACSD@a.isi.edu I am in the process of writing a metacircular Lisp interpreter which accommodates concurrent programming constructs (e.g. parbegin/parend's and semaphores) and have recently come across *engines* in PC Scheme. Engines seem like they offer much potential for this sort of thing, however, they seem somewhat tricky. It is especially unclear to me how to elegantly handle waits & signals for semaphores. (There must be a better way than Ben-Ari's Pascal concurreny simulator.) Any advice, pointers to sources, or code would be much appreciated. Cris Kobryn VERACSD.CK@A.ISI.EDU I also felt their must be a better way thay the Pascal Concurrency simulator to expose my operating systems classes to concurrency problems in a high level language. This helped motivate the design of engines. Here is a simple engine operating system (dispatcher with semaphores and a few other primitive process operations) that I give my class, along with some primitive documentation. I hope you enjoy them. Chris Haynes haynes@iuvax.cs.indiana.edu ----------------------------------------------------------------------------- SCHEME ENGINE OPERATING SYSTEM Preliminary Documentation (Spring, 1987) Christopher T. Haynes The engine mechanism is documented in the paper "An abstraction of timed preemption" by C. T. Haynes and D. P. Friedman, to appear in Computer Languages and also available as Indiana University Computer Science Department Technical Report No. 178. This paper outlines a simple dispatcher, similar to that used in this operating system. The operating system (actually, it is just a dispatcher with trap handler) documented here is intended to be as simple as possible, yet still be useful for solving synchronization problems. No attempt has been made to make this operating system secure. For example, only the semaphore implementation should be allowed to issue a WAIT or SIGNAL trap, but this restriction is not enforced. A more elaborate operating system with a secure semaphore implementation is described in an earlier paper by Haynes and Friedman, entitled "Engines build process abstractions," which appeared in the Conference Record of the 1984 ACM Symposium on LISP and Functional Programming, pages 18-24. This operating system is supplied in its Chez Scheme version, but it may be easily ported to PC Scheme or Scheme84, the other two Scheme implementations that provide engines. To run the operating system (after loading it), use (boot) This starts the operating system with a single process that runs the procedure bound to BOOT-THUNK, which is initially defined to be a read-eval-print loop with the "os>" prompt. To exit from the operating system, simply (RESET) or make an error! Whenever any process reads input, time stops! For example, when the read-eval-print process reads, all computation stops until an expression has been read. (spin ) simply loops times. This is a good way for the read-eval-print process to kill time and let other processes run. There are two ways to create additional processes. (parbegin ... ) creates n processes which evaluate ... in parallel while the parent process (the one that evaluated the PARBEGIN expression) is blocked, and remains blocked until all the new processes finish evaluating their expressions and terminate. (trap 'fork ) creates a new process that thaws . The thunk should never return; if it does you get the error message "process tried to return". The fork operation returns a process object. (trap 'block

) and (trap 'unblock

) respectively block and unblock the process associated with process object

. (trap 'self) returns the process object of the current proces. (trap 'pause) causes the current process to relinquish the rest of its time slice. Semaphores are the synchronization mechanism of this operating system. (make-semaphore ) returns a new (general) semaphore with initial value . Semaphores are objects that respond to the messages WAIT and SIGNAL. That is, if is a semaphore, then ( 'signal) and ( 'wait) are the usual semaphore operations. The time slice size (in engine ticks) is determined with each dispatch by thawing the thunk bound to TIME-SLICE. Decreasing the time slice trades off efficiency for a higher probability of finding synchronization bugs. Randomness in the time slice increases the chance of finding bugs by repeating the same test programs, but means that bugs may not repeatable. Initially, TIME-SLICE is defined to be (lambda () (+ 5 (random 10)))) The variable DISPATCH-COUNT is incremented with each dispatch. This provides processes with a crude measure of time. Assume the file "demo.ss", which follows, has been loaded. (define time-slice (lambda () (+ 1 (random 2)))) (define inc-count (lambda (n) (recur loop ((n n)) (when (positive? n) (set!! count (1+ count)) (loop (- n 1)))))) (define count 0) (define demo (lambda () (set! count 0) (parbegin (inc-count 100) (inc-count 100)) count)) (define grind (lambda (x n) (trap 'fork (lambda () (recur loop () (display x) (flush-output *standard-output*) (spin n) (loop)))))) (define a nil) (define b nil) (define c nil) (define s nil) (define abc (lambda () (set! a (grind 'a 10)) (set! b (grind 'b 20)) (set! c (grind 'c 30)) (set! s (trap 'self)))) We then obtain the following transcript: > (boot) os> (demo) 121 os> (demo) 115 os> (abc) abc# os> (spin 50) aabacaba() os> (trap 'block a) * os> (spin 50) bcb() cos> (trap 'block b) * os> (spin 100) ccc() os> (trap 'unblock b) b* os> (spin 100) cbcbcbb() os> (reset) > When programming in this system using Chez Scheme, use the mutation operators SET!!, SET-CAR!!, SET-CDR!!, SWAP-BOX!!, SET-BOX!! and SET-VECTOR!! (instead of the single bang versions) in order to have more opportunity of discovering synchronization bugs. Ready processes are maintained in a ring data structure, and processes blocked on semaphores are kept in queues that are also made of rings. Processes are ring objects created by MAKE-RING. MAKE-RING takes a single argument and returns a ring element whose initial value is the argument value. A ring is a doubly linked circular list, which may be referenced by any one of its elements. A ring element, r, respond to messages as follows: value Returns the current value of r. set-value! Returns a function that takes a value and makes it the new value of r. singleton? Returns true if r is a singleton--a single element ring, and false otherwise. left Returns the element to the left of r in the ring. right Returns the element to the right of r in the ring. delete! Deletes r, which must not be a singleton, from the ring. r then becomes a singleton. insert-left! Returns a function that takes a ring element, which must be a singleton, and inserts it in the ring to the left of r. insert-right! Returns a function that takes a ring element, which must be a singleton, and inserts it in the ring to the left of r. MAKE-QUEUE is a function of no arguments that returns a new queue object. Queues are implemented as rings with a distinguished element, the mark, that separates the head and tail of the queue. A queue object, q, responds to the following messages as follows: enq! Returns a functions that takes a ring element and inserts it at the tail of the queue. deq! Removes a ring element from the head of the queue and returns it. empty? Returns true if the queue is empty, and false otherwise. ----------------------------------------------------------------------------- ;;; Engine Operting System ;;; ;;; Chez Scheme Verion, Spring 1987. ;;; ;;; Author: Chris Haynes (haynes@iuvax.cs.indiana.edu) ;;; (define-macro! set!! (name value) `(set! ,name (I ,value))) (define-macro! parbegin exps `(parbegin-thunks (list . ,(map (lambda (exp) `(lambda () ,exp)) exps)))) (define set-car!! (lambda (pair obj) (set-car! pair obj))) (define set-cdr!! (lambda (pair obj) (set-cdr! pair obj))) (define swap-box!! (lambda (box obj) (swap-box! box obj))) (define set-box!! (lambda (box obj) (set-box! box obj))) (define vector-set!! (lambda (vector n obj) (vector-set! vector n obj))) (define I (lambda (x) x)) (define make-ring (let ((singleton? (lambda (elt) (eq? (cadr elt) elt))) (key (box 'unique))) (lambda (value) (let* ((elt (cons '* '*)) (cdr-elt (cons elt elt))) (set-cdr!! elt cdr-elt) (set-car!! elt (lambda (msg) (if (eq? msg key) elt (case msg (value value) (set-value! (lambda (x) (set!! value x))) (singleton? (singleton? elt)) (left (caar cdr-elt)) (right (cadr cdr-elt)) (delete! (if (singleton? elt) (error 'make-ring "can't delete singleton ring") (begin (set-cdr!! (cdar cdr-elt) (cdr cdr-elt)) (set-car!! (cddr cdr-elt) (car cdr-elt)) (set-cdr!! cdr-elt elt) (set-car!! cdr-elt elt) '*))) (insert-left! (lambda (ring) (if (ring 'singleton?) (let ((elt2 (ring key))) (set-car!! (cdr elt2) (car cdr-elt)) (set-cdr!! (cdr elt2) elt) (set-cdr!! (cdar cdr-elt) elt2) (set-car!! cdr-elt elt2) '*) (error 'make-ring "can't insert non-singleton")))) (insert-right! (lambda (ring) (if (ring 'singleton?) (let ((elt2 (ring key))) (set-car!! (cdr elt2) elt) (set-cdr!! (cdr elt2) (cdr cdr-elt)) (set-car!! (cddr cdr-elt) elt2) (set-cdr!! cdr-elt elt2) '*) (error 'make-ring "can't insert non-singleton")))) (else (ferror 'make-ring "bad message to ring: ~a" msg)))))) (car elt))))) (define make-queue (lambda () (let ((mark (make-ring '()))) (lambda (msg) (case msg (enq! (mark 'insert-left!)) (deq! (if (mark 'singleton?) (error 'make-queue "can't dequeue from empty queue") (let ((r (mark 'right))) (r 'delete!) r))) (empty? (mark 'singleton?)) (else (ferror 'make-queue "bad message to queue: ~a" msg))))))) (define running #f) (define dispatch-count 0) (define dispatch (letrec ((k-pt car) (args-pt cdr) (fail (lambda (eng) eng)) (success (lambda (trap-val ticks-remaining) (let* ((ans (apply trap-handler (args-pt trap-val))) (new-engine (make-engine (lambda () ((k-pt trap-val) ans))))) (if pause (begin (set! pause #!false) new-engine) (new-engine ticks-remaining success fail)))))) (lambda () (set! dispatch-count (+ 1 dispatch-count)) (set! running (running 'right)) (let ((set-engine! (running 'set-value!))) (set-engine! ((running 'value) (time-slice) success fail)) (dispatch))))) (define pause #!false) (define time-slice (lambda () (+ 5 (random 10)))) (define os-read (lambda () (let loop () (let ((value (read))) (if (eof-object? value) (begin (trap 'pause) (loop)) value))))) (define read-eval-print (lambda (prompt) (let loop () (display prompt) (display " ") (write (eval (read))) (newline) (loop)))) (define boot-thunk (lambda () (read-eval-print "os>"))) (define boot (lambda () (set! dispatch-count 0) (set! running (make-ring (make-engine boot-thunk))) (dispatch))) (define spin (lambda (n) (when (not (zero? n)) (spin (- n 1))))) (define trap (lambda args (call/cc (lambda (k) (engine-return (cons k args)))))) (define trap-handler (rec trap (lambda args (let ((trap-type (car args)) (arg1 (when (not (null? (cdr args))) (cadr args)))) (case trap-type (unblock ((running 'insert-left!) arg1) '*) (block (when (eq? running arg1) (if (running 'singleton?) (begin (error 'trap-handler "DEADLOCK") (boot)) (begin (set! running (running 'left)) (set! pause #!true)))) (arg1 'delete!) '*) (fork (let ((pcb (make-ring (make-engine (lambda () (arg1) (error 'trap-handler "process tried to return")))))) ((running 'insert-left!) pcb) pcb)) (pause (set! pause #!true)) (self running) (wait (let ((^value arg1) (queue (caddr args))) (set-box! ^value (- (unbox ^value) 1)) (when (negative? (unbox ^value)) (let ((self (trap 'self))) (trap 'block self) ((queue 'enq!) self))) '*)) (signal (let ((^value arg1) (queue (caddr args))) (set-box! ^value (+ 1 (unbox ^value))) (when (not (positive? (unbox ^value))) (trap 'unblock (queue 'deq!))))) (else (ferror 'trap-handler "bad trap arguments: ~a" args) (reset))))))) (define make-semaphore (lambda (count) (let ((^value (box count)) (queue (make-queue))) (lambda (msg) (case msg (wait (trap 'wait ^value queue)) (signal (trap 'signal ^value queue)) (empty? (queue 'empty?))))))) (define parbegin-thunks (lambda (thunks) (let ((n (length thunks)) (mutex (make-semaphore 1)) (done (make-semaphore 0))) (for-each (lambda (thunk) (trap 'fork (lambda () (thunk) (mutex 'wait) (set!! n (- n 1)) (when (zero? n) (done 'signal)) (mutex 'signal) (trap 'block (trap 'self))))) thunks) (done 'wait))))  Received: from MIT-MULTICS.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 28 Apr 87 09:43:13 EDT Received: from BNANDP11(MAILER) by MITVMA (Mailer X1.23) id 9049; Tue, 28 Apr 87 07:19:43 EDT Received: by BNANDP11 (Mailer X1.23b) id 6570; Tue, 28 Apr 87 13:18:28 SET Date: Tue, 28 Apr 87 13:17:20 SET From: michel debar Subject: Scoops To: Scheme I would like to get a copy of the doc of Scoops. Could someone send me a copy ? Michel Debar fndp computing centre - rue grandgagnage 21 - 5000 namur - belgium phone +32 81 220631 telex 59222 facnam b earn:mdebar@bnandp11  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 22 Apr 87 15:52:39 EDT Received: from unido.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP id AA22754; Tue, 21 Apr 87 18:29:35 EDT Received: by unido.uucp with uucp; Tue, 21 Apr 87 23:48:28 +0100 Received: by gmdzi.UUCP id AA10066; Tue, 21 Apr 87 21:36:19 -0100 Date: Tue, 21 Apr 87 21:35+0100 From: "Juergen Christoffel" Subject: Please add ... To: scheme@mc.lcs.mit.edu Fcc: G1:>JC>mail>mail.kbin Expiration-Date: Tue, 19 May 87 21:35+0100 Message-Id: <870421213507.3.JC@LISPM-1.GMD> the address "unido!gmdzi!lispm-1!scheme-gmd"@seismo.css.gov to this mailing list. Thank you, JC  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 14 Apr 87 03:45:26 EDT Received: from mcvax.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP id AA29142; Tue, 14 Apr 87 03:41:42 EDT Received: by mcvax.cwi.nl; Tue, 14 Apr 87 09:19:30 +0200 (MET) Received: by inria.inria.fr; Tue, 14 Apr 87 09:14:01 +0200 (MET) Date: Tue, 14 Apr 87 09:08:33 -0200 Received: by crcge1.cge.fr, Tue, 14 Apr 87 09:08:33 -0200 From: mcvax!inria!crcge1.cge.fr!adams@seismo.CSS.GOV (Drew Adams) Message-Id: <8704140708.AA06992@crcge1.cge.fr> To: BROWNVM.bitnet@mit-multics.arpa, SCHEME@mc.lcs.mit.edu Subject: Scheme85 interpreter from Indiana... Voila! Here's some mail. Let me know if you don't receive it :).  Received: from paris.Berkeley.EDU (TCP 20010113056) by MC.LCS.MIT.EDU 13 Apr 87 12:49:19 EDT Received: by paris.Berkeley.EDU (3.2/1.22) id AA00188; Mon, 13 Apr 87 09:45:15 PDT From: larus@paris.Berkeley.EDU (James Larus) Message-Id: <8704131645.AA00188@paris.Berkeley.EDU> To: scheme@mc.lcs.mit.edu Cc: Jonathan A Rees Subject: Scheme programs Date: Mon, 13 Apr 87 09:45:12 PDT I'm sure that this question has been asked before (in fact, I may have asked it a while ago), but I'll ask again. I am looking for some moderate-sized (< 2,000 lines) Scheme programs that I can use as input for a program restructurer that I am writing. I would prefer programs that actually solve a definite problem and that are not IO bound. If you know of such a program and are willing to share it, please send me some mail describing it. Thanks, /Jim  Received: from MIT-MULTICS.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 12 Apr 87 14:39:35 EDT Received: from BROWNVM(MAILER) by MITVMA (Mailer X1.23) id 9156; Sun, 12 Apr 87 14:32:12 EDT Received: by BROWNVM (Mailer X1.23) id 9090; Sun, 12 Apr 87 14:34:44 EDT Date: Sun, 12 Apr 87 14:30:13 EDT From: David G. Durand To: SCHEME@MC.LCS.MIT.EDU Subject: Scheme85 interpreter from Indiana... I was interested in ftp-ing the scheme85 source, but the routing tables used on bitnet seem to be rather old, and we have no way of getting to your node. If you could send me some mail maybe we can figure something out. Thanks much, David G. Durand (LISP@BROWMVM.BITNET (or something like that))  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 9 Apr 87 01:01:40 EDT Received: by linc.cis.upenn.edu id AA03895; Wed, 8 Apr 87 23:31:29 AST Date: Wed, 8 Apr 87 23:31:29 AST From: tim@linc.cis.upenn.edu (Tim Finin) Posted-Date: Wed, 8 Apr 87 23:31:29 AST Message-Id: <8704090331.AA03895@linc.cis.upenn.edu> To: Kahn.pa@xerox.com, mike%acorn@live-oak.lcs.mit.edu, hudak-paul@yale-arpa Cc: scheme@mc.lcs.mit.edu, prolog-request@sushi.stanford.edu Subject: scheme in prolog The points that Ken, Mike and Paul make are quite valid and very interesting. Implementing an interpreter for a language with side effects in a language without them is bit of a problem and leads to some known tradeoffs. The mutable array example is a case in point. However, Prolog, as opposed to a purer and more abstact logic programming language does have side effects. One is free, if one chooses, to dynamically assert and retract clauses in the database. I was, in general, pleased with the way my scheme-in-prolog interpreter turned out, except when it came to implementing SET!. I was surprised that Prolog's side-effecting operations did not enable handle this in what I considered a good way. Tim  Received: from yale-celed.arpa (TCP 20011000034) by MC.LCS.MIT.EDU 8 Apr 87 19:21:14 EDT Received: by yale-celed.arpa; Wed, 8 Apr 87 17:17:56 EDT Date: Wed, 8 Apr 87 17:17:56 EDT From: Paul Hudak Full-Name: Paul Hudak Message-Id: <8704082117.AA14910@yale-celed.arpa> Received: by yale-ring (midas.ring.cs.yale.edu/58D) via WIMP-SWEEP (Version 1.8/1.4) ; Wed Apr 8 16:06:30 Received: by yale-ring (node-add2.ring.cs.yale.edu/ADD2) via WIMP-SPOOL (Version 1.2/1.4) ; Wed Apr 8 16:10:21 Subject: Re: scheme in prolog To: scheme@mc.lcs.mit.edu, prolog-request@sushi.stanford.edu Cc: mike%acorn@oak.lcs.mit.edu, tim@linc.cis.upenn.edu, Kahn.pa@Xerox.COM I was about to respond to the Tim Finin / Mike Beckerle discussion in much the same way that Ken Kahn did, so I won't bother now, except to point out that the efficiency issue, in particular the "aggregate update" or "copy avoidance" issue, has also been addressed by the functional programming community. This includes work in semantics-directed compilation as well as more general work by Alan Mycroft (in his dissertation), David Schmidt (see a recent TOPLAS paper about detecting "singlethreaded stores") and me (see POPL 85, Lisp and FP 86). The nice thing about doing all this in the functional programming paradigm is that the implementation of an interpreter for a language looks VERY MUCH (if not identical) to the formal semantics of the language. At Yale we have been experimenting a bit with such "truly direct" semantics-directed compilation/interpretation with very encouraging results. Thus, assuming one believes in denotational semantics (and I realize that some people don't...), then the answer to Ken Kahn's question: A more interesting question I think is whether one language can EASILY and NATURALLY implement another. would have to be in the affirmative. -Paul Hudak -------  Received: from Xerox.COM (TCP 1200400040) by MC.LCS.MIT.EDU 8 Apr 87 13:24:10 EDT Received: from Cabernet.ms by ArpaGateway.ms ; 08 APR 87 10:20:52 PDT Date: Wed, 8 Apr 87 10:20:31 PDT From: Kahn.pa@Xerox.COM Subject: Re: scheme in prolog In-Reply-To: "mike%acorn@LIVE-OAK.LCS.MIT.EDU's message of Tue, 7 Apr 87 19:38:00 EST" To: mike%acorn@LIVE-OAK.LCS.MIT.EDU cc: scheme@mc.lcs.mit.edu, prolog-request@sushi.stanford.edu Message-ID: <870408-102052-1129@Xerox> Tim Finin says "It is very difficult to implement an efficient interpreter for a language which has side-effects in prolog," while mike beckerle says "No more difficult, I think, than interpreting a language with side-effects in a language without side effects." Notice that Tim says "efficient" and mike doesn't. I think that much of the argument hinges on this point. Just to muddy the waters I want to bring up a paper in the 2nd international logic programming conference (1984) called "Mutable arrays in Prolog" (or some such). The paper essentially presents a naive implementation of arrays in Pure Prolog where every write copies and a read entails a linear search. It then goes on to describe a primitive implementation of the predicates for creating and accessing arrays. The primitive implementation in some cases actually had the same computational complexity as array primitives in conventional languages. Is there any specification of Prolog which would rule out a compiler that did such optimizations? The point is that something is wrong with the question of whether one language can EFFICIENTLY implement another. One can ask whether a particular implementation of a language can efficiently implement another. A more interesting question I think is whether one language can EASILY and NATURALLY implement another. - ken kahn References mike%acorn@LIVE-OAK.LCS.MIT.EDU's message of Tue, 7 Apr 87 19:38:00 EST -- scheme in prolog  Received: from A.ISI.EDU (TCP 3200600147) by MC.LCS.MIT.EDU 8 Apr 87 11:00:55 EDT Date: 8 Apr 1987 10:56-EDT Sender: VERACSD@A.ISI.EDU Subject: Concurrency in Scheme From: VERACSD@A.ISI.EDU To: scheme@MC.LCS.MIT.EDU Cc: veracsd.ck@A.ISI.EDU Message-ID: <[A.ISI.EDU] 8-Apr-87 10:56:52.VERACSD> I am in the process of writing a metacircular Lisp interpreter which accommodates concurrent programming constructs (e.g. parbegin/parend's and semaphores) and have recently come across *engines* in PC Scheme. Engines seem like they offer much potential for this sort of thing, however, they seem somewhat tricky. It is especially unclear to me how to elegantly handle waits & signals for semaphores. (There must be a better way than Ben-Ari's Pascal concurreny simulator.) Any advice, pointers to sources, or code would be much appreciated. Cris Kobryn VERACSD.CK@A.ISI.EDU  Received: from LIVE-OAK.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 7 APR 87 20:08:11 EDT Received: from GOLD-HILL-ACORN.DialNet.Symbolics.COM by MIT-LIVE-OAK.ARPA via DIAL with SMTP id 36410; 7 Apr 87 20:07:38-EDT Received: from BOSTON.Gold-Hill.DialNet.Symbolics.COM by ACORN.Gold-Hill.DialNet.Symbolics.COM via CHAOS with CHAOS-MAIL id 62778; Tue 7-Apr-87 19:38:06-EST Date: Tue, 7 Apr 87 19:38 est From: mike%acorn@oak.lcs.mit.edu To: tim@linc.cis.upenn.edu (Tim Finin) Reply-to: mike%acorn@oak.lcs.mit.edu Subject: scheme in prolog Cc: scheme@mc.lcs.mit.edu, prolog-request@sushi.stanford.edu Date: Sun, 5 Apr 87 01:42:37 EST From: tim@linc.cis.upenn.edu (Tim Finin) What I found most interesting about the exercise has more to do with Prolog than with Scheme - It is very difficult to implement an efficient interpreter for a language which has side-effects in prolog. No more difficult, I think, than interpreting a language with side-effects in a language without side effects. Consider writing a scheme interpreter in Pure Scheme or in ML (not using the side effects). In either case, the technique you end up using makes the interpreter look alot like a denotational semantics (Pure Scheme or ML case) or a Plotkin-Style operational semantics (Prolog Case). I basically considered two alternatives for representing the environment: o represent an environment as a term which contains a sequence of variable-name/variable-value pairs. This achieves (1) in most prologs but must give up on either (2) or (3). o represent an environment as a set of assertions in the clausal database of the form: bound(Symbol,Value,EnvironmentID). This wins on (2) and (3) but loses on (1). I think you should build an abstract data type for this rather than expecting terms and pattern matching or the interpreter to do it for you. The best you'll be able to do in prolog is a tree like representation, requiring logarithmic access time and update time (as well as logarithmic space for copying on updates.) lookup (X, Env, Value) :- ....given X find value V in environment E. update (X, V, Env1, Env2) :- update X to value V in environment Env1 to get environment Env2. This makes me think that a side-effect predicate like RPLACARG (discussed in PROLOG-DIGEST about a year ago) is not such a bad idea. Yup. The difficulty is that it is hard to use side effects in a language with automatic control structures. You basically can't get the level of operational control you need, but the declarative model also breaks down. In any case I'd say RPLACARG will be infinitely MORE useful than assert and retract ever were. Consider for example the UPDATE predicate above. This, written using RPLACARG would destructively update the environment Env1 to make Env2, which is exactly what you need. It also reinforces the notion that Lisp is either a (i) more general or (ii) lower level language than Prolog, depending, of course, on your point of view. Both I'd say. Prolog is a very high level language, and is less expressive than languages with side effects. What I mean by expressive here is not the usual formal definition, since Prolog is clearly complete in that all computable functions can be computed, but rather a pragmatic view. Any language without side effects is restricted in that it cannot describe changes of state over time without having representations of those states separately. Try writing code for hash-tables in prolog or pure scheme and you'll see what I mean. Hashing (like most side effect oriented code) requires side effects in its essence since it has to reason about whether buckets in the table are in use "yet". They also lack any notion of EQ-ness as in Lisp or Scheme for the same reason. ...mike beckerle Gold Hill Computers  Received: from SIMTEL20.ARPA (TCP 3200000112) by MC.LCS.MIT.EDU 6 Apr 87 12:22:19 EDT Date: Mon, 6 Apr 87 10:19:25 MDT From: Raul Machuca Subject: Need consultant To: scheme@MC.LCS.MIT.EDU Message-ID: <12292372602.16.RMACHUCA@SIMTEL20.ARPA> We are working on a small prototype for a range scheduling system using TIPC Scheme. We need the help of a faculty member familiar with Scheme and AI concepts. The total time would be 90 days not necessarily continuous but taking place within 6 months from the date the contract is initiated. Starting date would be about the end of June. The work would be done at your installation and graduate students could be included. If anyone is interested please let me know and I will send you more information. PS. Rate of pay is computed from 9 month salary. -------  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 5 Apr 87 01:47:17 EST Received: by linc.cis.upenn.edu id AA08740; Sun, 5 Apr 87 01:42:37 EST Date: Sun, 5 Apr 87 01:42:37 EST From: tim@linc.cis.upenn.edu (Tim Finin) Posted-Date: Sun, 5 Apr 87 01:42:37 EST Message-Id: <8704050642.AA08740@linc.cis.upenn.edu> To: scheme@mc.lcs.mit.edu, prolog-request@sushi.stanford.edu Subject: scheme in prolog A while back there was a discussion on the SCHEME newsgroup concerning implementations of logic programming languages in Scheme. David Moon wondered if anyone had implemented Prolog in Scheme. His query stimulated me to give it a try. I wrote two interpreters for a subset of Scheme, one with and one without continuation semantics. I'm happy to share these with anyone who is interested. What I found most interesting about the exercise has more to do with Prolog than with Scheme - It is very difficult to implement an efficient interpreter for a language which has side-effects in prolog. I could not find a way to represent environments which had what I consider to be the neccessary features: 1 - unreferenced enviroments should be automatically GCed. 2 - looking up the value of a variable should be cheap and, in particular, should not depend on the the number of values it has received in the past. 3 - variable assignment should be cheap and, in particular should not require copying abritrary portions of an environment. 4 - The interpreter should not require an infinite stack nor should the host prolog be required to detect and optimize for tail recursion. I basically considered two alternatives for representing the environment: o represent an environment as a term which contains a sequence of variable-name/variable-value pairs. This achieves (1) in most prologs but must give up on either (2) or (3). o represent an environment as a set of assertions in the clausal database of the form: bound(Symbol,Value,EnvironmentID). This wins on (2) and (3) but loses on (1). This makes me think that a side-effect predicate like RPLACARG (discussed in PROLOG-DIGEST about a year ago) is not such a bad idea. It also reinforces the notion that Lisp is either a (i) more general or (ii) lower level language than Prolog, depending, of course, on your point of view. Tim  Received: from SIMTEL20.ARPA (TCP 3200000112) by MC.LCS.MIT.EDU 4 Apr 87 23:26:54 EST Date: Sat 4 Apr 87 21:24:08-MST From: Raul Machuca Subject: TIPC windows To: scheme@MC.LCS.MIT.EDU Message-ID: <12291980245.17.RMACHUCA@SIMTEL20.ARPA> An application of PC Scheme that I am working on requires that a large amount of asc2 data be displayed. One large monitor available is the Amdek 1280 which displays 160 columns by 50 rows. Does anyone have any experience using PC Scheme with this or any other monitor that can display as much or more data? Do the PC window programs work without modification? -------  Received: from nrl-aic.ARPA (TCP 3200200010) by MC.LCS.MIT.EDU 2 Apr 87 10:10:40 EST Return-Path: Received: Thu, 2 Apr 87 10:09:10 est by nrl-aic.ARPA id AA10377 Date: 2 Apr 1987 09:53:40 EST (Thu) From: Dan Hoey Subject: More bum code To: scheme@mc.lcs.mit.edu Message-Id: <544373621/hoey@nrl-aic> It seems a shame to change the names in the code without improving the algorithm. So I bummed out a quarter of the multiplications and a seventh of the additions, and dyked out the useless clause. Sorry it's so late.... (defun f(| |) (labels ((|| (| |) (cond ((zerop | |) (values 1 0)) ((evenp | |) (multiple-value-bind (|(| |)|) (|| (/ | | 2)) (values (+ (* |(| |(|) (* |)| |)|)) (* (+ |(| (- |(| |)|)) |)|)))) (t (multiple-value-bind (|(| |)|) (|| (/ (1- | |) 2)) (values (* |(| (+ |(| |)| |)|)) (+ (* |(| |(|) (* |)| |)|)))))))) (values (|| | |)))) Dan  Received: from BFLY-VAX.BBN.COM (TCP 20026200235) by MC.LCS.MIT.EDU 1 Apr 87 19:50:49 EST To: Guy Steele cc: scheme@mc.lcs.mit.edu, RPG@sail.stanford.edu, allen@bfly-vax.bbn.com Subject: Re: A Couple of Fun Programs In-reply-to: Your message of Tue, 31 Mar 87 12:06 EST. <870331120636.7.GLS@FEUERBACH.THINK.COM> Date: 01 Apr 87 17:54:35 EST (Wed) From: allen@bfly-vax.bbn.com To help you get a start in your gnu career as a Unix hacker, here's my conjecture as to how you might have written the second function had you worked at Bell Labs or Berkeley: (defun yucc (++) (labels (($1 (grep ^[^:]*:: /usr/etc/passwd kill %1 a.out) (let ((*p++ (* ^[^:]*:: %1))) (values (+ (* grep kill) *p++) (+ (* grep %1) (* ^[^:]*:: a.out)) (+ *p++ (* /usr/etc/passwd a.out))))) (*argv[] (++) (cond ((zerop ++) (values 1 0 0)) ((= ++ 1) (values 1 1 0)) ((evenp ++) (multiple-value-bind (grep ^[^:]*:: /usr/etc/passwd) (*argv[] (truncate ++ 2)) ($1 grep ^[^:]*:: /usr/etc/passwd grep ^[^:]*:: /usr/etc/passwd))) (t (multiple-value-bind (grep ^[^:]*:: /usr/etc/passwd) (*argv[] (1- ++)) ($1 1 1 0 grep ^[^:]*:: /usr/etc/passwd)))))) (prog1 (*argv[] ++)))) %!$don  Received: from BFLY-VAX.BBN.COM (TCP 20026200235) by MC.LCS.MIT.EDU 1 Apr 87 19:50:49 EST To: Guy Steele cc: scheme@mc.lcs.mit.edu, RPG@sail.stanford.edu, allen@bfly-vax.bbn.com Subject: Re: A Couple of Fun Programs In-reply-to: Your message of Tue, 31 Mar 87 12:06 EST. <870331120636.7.GLS@FEUERBACH.THINK.COM> Date: 01 Apr 87 17:54:35 EST (Wed) From: allen@bfly-vax.bbn.com To help you get a start in your gnu career as a Unix hacker, here's my conjecture as to how you might have written the second function had you worked at Bell Labs or Berkeley: (defun yucc (++) (labels (($1 (grep ^[^:]*:: /usr/etc/passwd kill %1 a.out) (let ((*p++ (* ^[^:]*:: %1))) (values (+ (* grep kill) *p++) (+ (* grep %1) (* ^[^:]*:: a.out)) (+ *p++ (* /usr/etc/passwd a.out))))) (*argv[] (++) (cond ((zerop ++) (values 1 0 0)) ((= ++ 1) (values 1 1 0)) ((evenp ++) (multiple-value-bind (grep ^[^:]*:: /usr/etc/passwd) (*argv[] (truncate ++ 2)) ($1 grep ^[^:]*:: /usr/etc/passwd grep ^[^:]*:: /usr/etc/passwd))) (t (multiple-value-bind (grep ^[^:]*:: /usr/etc/passwd) (*argv[] (1- ++)) ($1 1 1 0 grep ^[^:]*:: /usr/etc/passwd)))))) (prog1 (*argv[] ++)))) %!$don  Received: from Think.COM (TCP 1201000006) by MC.LCS.MIT.EDU 1 Apr 87 14:47:08 EST Received: from feuerbach by Think.COM via CHAOS; Wed, 1 Apr 87 14:40:24 EST Date: Wed, 1 Apr 87 14:40 EST From: Guy Steele Subject: Apologies To: scheme@mc.lcs.mit.edu In-Reply-To: <870401125208.6.GLS@FEUERBACH.THINK.COM> Message-Id: <870401144024.7.GLS@FEUERBACH.THINK.COM> It has been pointed out to me that me translation of RPG's latest program does not preserve its semantics quite properly because "+" and "*" are typically proclaimed SPECIAL in Common Lisp implementations and therefore are dynamically bound whether you like it or not. Here is a correct translation that avoids this problem, and I'll not trouble you any further. --Quux (defun f (]) (labels (([ (]) (cond ((zerop ]) (values 1 0)) ((= ] 1) (values 1 1)) ((evenp ]) (multiple-value-bind ({ }) ([ (/ ] 2)) (values (+ (* { {) (* } })) (+ (* { }) (* } (- { })))))) (t (multiple-value-bind (+ }) ([ (- ] 1)) (values (+ { }) {)))))) (values ([ ]))))  Received: from Think.COM (TCP 1201000006) by MC.LCS.MIT.EDU 1 Apr 87 12:58:45 EST Received: from feuerbach by Think.COM via CHAOS; Wed, 1 Apr 87 12:51:57 EST Date: Wed, 1 Apr 87 12:52 EST From: Guy Steele Subject: A Couple of Fun Programs To: scheme@mc.lcs.mit.edu Cc: RPG@sail.stanford.edu, gls@think.com In-Reply-To: <870331120636.7.GLS@FEUERBACH.THINK.COM> Message-Id: <870401125208.6.GLS@FEUERBACH.THINK.COM> Date: 31 Mar 87 1531 PST From: Dick Gabriel Now that you've seen the instructional version of the second puzzle function, here's the slightly bummed (15% faster) version: ... And, as a further public service, here is a translation: (defun f (*) (labels ((> (*) (cond ((zerop *) (values 1 0)) ((= * 1) (values 1 1)) ((evenp *) (multiple-value-bind (+ /) (> (/ * 2)) (values (+ (* + +) (* / /)) (+ (* + /) (* / (- + /)))))) (t (multiple-value-bind (+ /) (> (- * 1)) (values (+ + /) +)))))) (values (> *)))) --Quux  Received: from MIT-MULTICS.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 1 Apr 87 05:01:23 EST Received: from HDETUD1(ETSTMOL) by MITVMA (Mailer X1.23) id 8125; Wed, 01 Apr 87 04:47:17 EST Date: Wed, 01 Apr 87 11:42:45 MET To: SCHEME@MC.LCS.MIT.EDU From: ETSTMOL@HDETUD1.BITNET Subject: NOTE from ETSTMOL Date: 1 April 1987, 11:41:06 MET From: Marcel Mol ETSTMOL at HDETUD1 Delft University of Technology Faculty of Electrical engineering To: SCHEME at MC.LCS At the Delft University in the Netherlands we started a Lisp project. At this moment we want to build a package onto scheme that implements Common Lisp. Has someone done this before, or thought about it before? We appreciate any help. Thanks Marcel Mol, Frank ten Wolde Anton Klaasen, Arno Wezenbeek  Received: from SAIL.STANFORD.EDU (TCP 1200000013) by MC.LCS.MIT.EDU 31 Mar 87 23:24:14 EST Date: 31 Mar 87 1531 PST From: Dick Gabriel Subject: More on Fun Programs To: scheme@MC.LCS.MIT.EDU Now that you've seen the instructional version of the second puzzle function, here's the slightly bummed (15% faster) version: (defun f (i) (labels ((g (i) (cond ((zerop i) (values 1 0)) ((= i 1) (values 1 1)) ((evenp i) (multiple-value-bind (n n-1) (g (/ i 2)) (values (+ (* n n) (* n-1 n-1)) (+ (* n n-1) (* n-1 (- n n-1)))))) (t (multiple-value-bind (n n-1) (g (- i 1)) (values (+ n n-1) n)))))) (values (g i)))) -rpg-  Received: from BFLY-VAX.BBN.COM (TCP 20026200235) by MC.LCS.MIT.EDU 31 Mar 87 19:01:10 EST To: Guy Steele cc: scheme@mc.lcs.mit.edu, RPG@sail.stanford.edu, allen@bfly-vax.bbn.com Subject: Re: A Couple of Fun Programs In-reply-to: Your message of Tue, 31 Mar 87 12:06 EST. <870331120636.7.GLS@FEUERBACH.THINK.COM> Date: 31 Mar 87 18:04:57 EST (Tue) From: allen@bfly-vax.bbn.com Ever thought about doing some user-interface work for Unix? It's clear that you have the talent. /Don  Received: from Think.COM (TCP 1201000006) by MC.LCS.MIT.EDU 31 Mar 87 12:56:36 EST Received: from feuerbach by Think.COM via CHAOS; Tue, 31 Mar 87 12:06:05 EST Date: Tue, 31 Mar 87 12:06 EST From: Guy Steele Subject: A Couple of Fun Programs To: scheme@mc.lcs.mit.edu Cc: RPG@sail.stanford.edu, gls@think.com In-Reply-To: <8703310526.AA01555@Think.COM> Message-Id: <870331120636.7.GLS@FEUERBACH.THINK.COM> Those who found RPG's sample programs difficult to read because of the "non-instructive variable names" may find the following versions (completely equivalent, valid Common Lisp, and tested) a bit more perspicuous: (defun f (if) (labels ((packagep (if cons) (if (= if cons) if (let ((with-open-file (truncate (+ cons if) 2))) (* (packagep if with-open-file) (packagep (+ with-open-file 1) cons)))))) (packagep 1 if))) (defun f (if) (labels ((atanh (go cond labels do* proclaim set-macro-character) (let ((setf (* cond proclaim))) (values (+ (* go do*) setf) (+ (* go proclaim) (* cond set-macro-character)) (+ setf (* labels set-macro-character))))) (read-preserving-whitespace (if) (cond ((zerop if) (values 1 0 0)) ((= if 1) (values 1 1 0)) ((evenp if) (multiple-value-bind (go cond labels) (read-preserving-whitespace (truncate if 2)) (atanh go cond labels go cond labels))) (t (multiple-value-bind (go cond labels) (read-preserving-whitespace (1- if)) (atanh 1 1 0 go cond labels)))))) (prog1 (read-preserving-whitespace if)))) --Quux  Received: from SAIL.STANFORD.EDU (TCP 1200000013) by MC.LCS.MIT.EDU 31 Mar 87 00:04:46 EST Date: 30 Mar 87 2057 PST From: Dick Gabriel Subject: A Couple of Fun Programs To: scheme@MC.LCS.MIT.EDU Jonathan sent out an interesting program the other day, and I was prompted to send two more. These are (ugh, bletch) Common Lisp programs, but I think it's instructive to see that CL programs don't have to look completely silly (not using DO loops, &-constructs, &tc). It's your job to figure them out without running them. LABELS is like LETREC, TRUNCATE rounds towards 0, (VALUES x y z) returns three values, and (MULTIPLE-VALUE-BIND (X Y Z) (RETURN-THREE-VALUES) . ) binds the three variables X, Y, and Z appropriately and executes . (defun f (n) (labels ((f (n m) (if (= n m) n (let ((h (truncate (+ m n) 2))) (* (f n h) (f (+ h 1) m)))))) (f 1 n))) (defun f (i) (labels ((g (n n-1 n-2 m m-1 m-2) (let ((k (* n-1 m-1))) (values (+ (* n m) k) (+ (* n m-1) (* n-1 m-2)) (+ k (* n-2 m-2))))) (h (i) (cond ((zerop i) (values 1 0 0)) ((= i 1) (values 1 1 0)) ((evenp i) (multiple-value-bind (n n-1 n-2) (h (truncate i 2)) (g n n-1 n-2 n n-1 n-2))) (t (multiple-value-bind (n n-1 n-2) (h (1- i)) (g 1 1 0 n n-1 n-2)))))) (prog1 (h i)))) They are written using non-instructive variable names. -rpg-  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 30 Mar 87 14:05:11 EST Date: Mon, 30 Mar 87 14:01:36 EST From: Jonathan A Rees Subject: almost scheme in common lisp To: common-lisp@SAIL.STANFORD.EDU, scheme@MC.LCS.MIT.EDU Message-ID: <176048.870330.JAR@AI.AI.MIT.EDU> I have written a macro package which implements Scheme, less general tail-recursion and first-class continuations, in Common Lisp. It appears to be effective at transforming any Common Lisp implementation into an acceptable development environment for Scheme programs. Loops written using LETREC, internal DEFINE, or "named LET" are macroexpanded into an appropriate TAGBODY construct, but other than that, tail recursion is only done at the whim of your particular CL implementation. Being a macro package and not a compiler or interpreter, continuations also clearly can't work in general (unless, again, your CL just happens to support them). Other incompatibilities with the "Revised^3" Scheme report are minor. It's called "Pseudoscheme" and resides in MC.LCS.MIT.EDU: "JAR;PSEUDO >" The documentation is in MC.LCS.MIT.EDU: "JAR;PSEUDO DOC" I'll send it by electronic mail to those unable to FTP it. Please send mail to INFO-CLSCHEME-REQUEST@MC.LCS.MIT.EDU if you start using it, so you can stay up to date on improvements. Feel free to redistribute it, but try to let me know if you do so. The documentation file describes its peculiarities in somewhat more detail. - Jonathan Rees  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 28 Mar 87 15:52:04 EST Date: Sat, 28 Mar 87 15:48:59 EST From: Jonathan A Rees Subject: test To: scheme@MC.LCS.MIT.EDU Message-ID: <175274.870328.JAR@AI.AI.MIT.EDU> I just changed the mailing list so that it uses fully qualified domain names instead of nicknames. This is a test to see whether I made any mistakes. Just so this message isn't a total bore for those reading it, I thought I'd include some amusing Scheme code. It was inspired by the programming language Icon. - Jonathan (define (fail) (*fail*)) (define *fail* (lambda () (error "Please do (INIT) first."))) (define cwcc call-with-current-continuation) (define (init) (cwcc (lambda (c) (set! *fail* (lambda () (c 'failed))) 'initialized))) (define (either a b) ;a and b are thunks (let ((saved-fail *fail*)) (cwcc (lambda (c) (set! *fail* (lambda () (set! *fail* saved-fail) (c (b)))) (a))))) (define (bag-of a) ;a is a thunk (let ((saved-fail *fail*) (l '())) (cwcc (lambda (c) (set! *fail* (lambda () (set! *fail* saved-fail) (c l))) (set! l (cons (a) l)) (fail))))) (define (member-of l) ;generates members of list l (if (null? l) (fail) (either (lambda () (car l)) (lambda () (member-of (cdr l)))))) (define (fringe s) ;generates fringe of s-expression s (if (null? s) (fail) (if (pair? s) (either (lambda () (fringe (car s))) (lambda () (fringe (cdr s)))) s))) (define (f-equal? a b) ;fails if not equal (if (equal? a b) a (fail))) (define (dot proc g1 g2) ;g1, g2 are thunks (let ((fail1 nil) (fail2 nil) (v1 nil)) (set! fail2 (let ((fail0 *fail*)) (lambda () (set! *fail* fail0) (let ((v2 (g2))) (set! fail2 *fail*) (set! *fail* fail1) (proc v1 v2))))) (set! v1 (g1)) (set! fail1 *fail*) (fail2))) ;;; Examples: ;;; ;;; (f-equal? (member-of '(a b c d))) ;;; (member-of '(e c f))) ;;; => c ;;; ;;; (bag-of (lambda () ;;; (dot list (lambda () (fringe '((a b) c))) ;;; (lambda () (fringe '(d (e f))))))) ;;; => ((c f) (b e) (a d))  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 26 Mar 87 06:43:59 EST Received: from relay2.cs.net by RELAY.CS.NET id aa08831; 26 Mar 87 6:37 EST Received: from switzerland by RELAY.CS.NET id aa00959; 26 Mar 87 6:31 EST Received: from ean by SWITZERLAND.CSNET id a020686; 26 Mar 87 12:20 WET From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at SWITZERLAND.CSNET Message-ID: <223:shneider@cui.unige.chunet> Subject: Correction mistake: Looking for comments on an introductory article .. > I just finished an introductory article about Scheme which is due by the >end of this week (sorry) and which will appear in the SGAICO/SI Newsletter. SORRY, I goofed ^^^ , this article (cf. my posting march 24th) is due in three weeks only. (for those who wanted to look at it actually, but couldn't this week !) - d.s. PS: I am amazed, I already got 5 replies (BIG thanks to the scheme community)  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 26 Mar 87 05:35:09 EST Received: from relay2.cs.net by RELAY.CS.NET id aa08512; 26 Mar 87 5:30 EST Received: from switzerland by RELAY.CS.NET id aa00706; 26 Mar 87 5:23 EST Received: from ean by SWITZERLAND.CSNET id a020472; 26 Mar 87 11:15 WET From: "Daniel K. Schneider" Sender: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at SWITZERLAND.CSNET Message-ID: <222:shneider@cui.unige.chunet> Subject: Private message to Cynthia Mason. (mail problem) Sorry, I can't get back to you, something in your adress got chewed up, (probably by your mailer). I tried Arpa, but it did not work. I get this: Cynthia Mason 423-9404 Send me your message again with your address included *in* the message text. preferably one of: ARPA/EDU, uucp, cs-net, BITNET  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 25 Mar 87 12:25:21 EST Received: from mcvax.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP id AA05803; Wed, 25 Mar 87 12:20:10 EST Received: by mcvax.cwi.nl; Wed, 25 Mar 87 18:19:22 +0100 (MET) Received: by inria.inria.fr; Wed, 25 Mar 87 17:42:51 +0100 (MET) Received: by crcge1.DIN; Wed, 25 Mar 87 13:25:34 -0100 Date: Wed, 25 Mar 87 13:25:34 -0100 From: mcvax!crcge1!adams@seismo.CSS.GOV (Drew Adams) Message-Id: <8703251225.AA16715@crcge1.DIN> To: scheme@mc.lcs.mit.edu Subject: scheme mailing list Please place me on your mailing list. Thanks. Drew ADAMS, Laboratoires de Marcoussis, Centre de Recherche de la Compagnie Generale d'Electricite, Route de Nozay, 91460 MARCOUSSIS, FRANCE Tel. 64.49.11.54, seismo!mcvax!inria!crcge1!adams  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 24 Mar 87 12:58:00 EST Received: from relay2.cs.net by RELAY.CS.NET id af22835; 24 Mar 87 12:37 EST Received: from northeastern.edu by RELAY.CS.NET id ak18416; 24 Mar 87 12:33 EST Received: from corwin.ccs.northeastern.edu by nuhub.acs.northeastern.edu; Tue, 24 Mar 87 11:06 EST Received: by corwin.CCS.Northeastern.EDU (5.51/5.17) id AA13177; Tue, 24 Mar 87 11:00:39 EST Date: Tue, 24 Mar 87 11:00:39 EST From: wand%corwin.ccs.northeastern.edu@RELAY.CS.NET To: muller@BU-CS.BU.EDU Cc: scheme@MC.LCS.MIT.EDU In-Reply-To: muller@bu-cs.bu.edu's message of Mon, 23 Mar 87 10:47:11 EST Subject: Scheme mode in GNU Emacs Yes, I have a modified version of scheme.el (and shell.el) to do the right thing with [] and also to run scheme as an inferior process reasonably. I will mail it if anyone is interested. Mitch Wand  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 24 Mar 87 02:09:48 EST Received: from relay2.cs.net by RELAY.CS.NET id aa19225; 24 Mar 87 1:56 EST Received: from switzerland by RELAY.CS.NET id aa15408; 24 Mar 87 1:52 EST Received: from ean by SWITZERLAND.CSNET id a013971; 24 Mar 87 7:44 WET From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at SWITZERLAND.CSNET Message-ID: <211:shneider@cui.unige.chunet> Subject: Looking for comments on an introductory article about Scheme I just finished an introductory article about Scheme which is due by the end of this week (sorry) and which will appear in the SGAICO/SI Newsletter. SGAICO (Swiss Group for AI and CO) is a special interest group of SI (Swiss ACM Chapter) TOPIC: 1. Philosophy and History of Scheme (lots of quotes from the R^3 appendix and S&ICP) 2. The language (inspired by R^3 and the banking account of S&ICP) 3. List of implementations 4. A review of PC Scheme I wonder, if any kind soul out there could have a look at it and make some comments and/or corrections. The article is certainly *not* worth looking at, but for somebody it might be important that the Swiss get the good things right. :) The whole thing is written by an amateur, who does not want to clutter up this mailing list. If anybody has some spare time, please reply. I can send you either a Scribe file or a semi-formatted thing. If REPLY does not work, try one of the addresses below. Thanks - Daniel ------------------------------------------------------------------------------- Daniel K.Schneider ISSCO, University of Geneva, 54 route des Acacias, 1227 Carouge (Switzerland) Tel. (..41) (22) 20 93 33 ext. 2114 to VMS/BITNET: to UNIX/EAN (preferable): BITNET: SCHNEIDER@CGEUGE51 shneider%cui.unige.chunet@CERNVAX ARPA: SCHNEIDER%CGEUGE51.BITNET@WISCVM shneider@cui.unige.CHUNET or: shneider%cui.unige.chunet@ubc.csnet uucp: mcvax!cernvax!cui!shneider  Received: from geneva (TCP 2206400372) by MC.LCS.MIT.EDU 23 Mar 87 11:49:51 EST Received: by GENEVA.AI.MIT.EDU; Mon, 23 Mar 87 11:46:14 est Date: Mon, 23 Mar 87 11:46:14 est From: jinx@GENEVA.AI.MIT.EDU (Guillermo J. Rozas) Message-Id: <8703231646.AA09139@geneva> To: muller@bu-cs.bu.edu Cc: scheme@MC.LCS.MIT.EDU In-Reply-To: muller@bu-cs.bu.edu's message of Mon, 23 Mar 87 10:47:11 EST <8703231547.AA03759@bucse.bu.edu> Subject: Scheme mode in GNU Emacs Has anyone out there taken the time to rewrite the Scheme support for GNU Emacs so that it understands R^3 Scheme syntax? In particular I'd like to use the Scheme84 "[" and "]" for parentheses and have the indentation and balancing come out right. Inferior scheme mode also seems to be intolerant of vt200 series terminals. Has anyone repaired this? R^3RS does not define the syntax of [ and ]. That is Scheme84 and ChezScheme specific (as far as I know). You can probably do that by copying the syntax table entries from ( and ) to [ and ], respectively. The currently released version of the GNU Emacs scheme support matches MIT CScheme release 4, which is not 100% compatible with R^3RS. As soon as we make our 5th release, 100% compatible with R^3RS (in a couple of weeks, if all goes well), a new version of the interface will be released. It will not support [ and ], since that is not a "feature" of MIT Scheme (some of us think it is a really bad idea). The released version of inferior Scheme mode does nothing which is terminal dependent, so there must be a bug in GNU Emacs which is manifesting itself in this mode. Are you using MIT Scheme as the inferior scheme?  Received: from bu-cs.bu.edu (TCP 30003134401) by MC.LCS.MIT.EDU 23 Mar 87 10:51:43 EST Received: from bucse.bu.edu by bu-cs.bu.edu (3.2/4.7) id AA20861; Mon, 23 Mar 87 10:45:26 EST Return-Path: Received: by bucse.bu.edu (5.31/4.7) id AA03759; Mon, 23 Mar 87 10:47:11 EST Date: Mon, 23 Mar 87 10:47:11 EST From: muller@bu-cs.bu.edu Message-Id: <8703231547.AA03759@bucse.bu.edu> To: scheme@MC.LCS.MIT.EDU Subject: Scheme mode in GNU Emacs Has anyone out there taken the time to rewrite the Scheme support for GNU Emacs so that it understands R^3 Scheme syntax? In particular I'd like to use the Scheme84 "[" and "]" for parentheses and have the indentation and balancing come out right. Inferior scheme mode also seems to be intolerant of vt200 series terminals. Has anyone repaired this? Thanks bob  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 22 Mar 87 20:14:02 EST Received: from munnari.oz by seismo.CSS.GOV (5.54/1.14) with UUCP id AA15239; Sun, 22 Mar 87 20:09:11 EST Message-Id: <8703230109.AA15239@seismo.CSS.GOV> Received: from cidam (via goanna) by munnari with SunIII (5.5) id AA23604; Mon, 23 Mar 87 10:15:26 EST Received: by cidam.rmit.oz (4.3+RMIT/4.7) id AA24441; Sun, 22 Mar 87 14:27:04 EST Date: Sun, 22 Mar 87 14:27:04 EST From: munnari!cidam.rmit.oz!mg@seismo.CSS.GOV (Mike A. Gigante) To: scheme@mc.lcs.mit.edu Subject: dump-world problem on 4.2BSD vax (version 4 C-scheme) I get the following error when using dump-world. (vax 750, 4.2BSD) % scheme Scheme Microcode Version 8.2 MIT Scheme, UNIX version ^AH (CTRL-A, then H) shows help on interrupt keys. FASLoading file /usr/mg/lib/scheme/scheme.bin Scheme saved on Saturday March 21, 1987 at 9:55:37 AM Release 4.1.1 Microcode 8.2 Runtime 11.4 Features 1.2 Cross 11.1 Unix Interface 1.2 1 ]=> (dump-world "myScheme") Failure operating on scheme Anomalous error -- get a wizard 23 There is no environment available; using the current read-eval-print environment. The error also occurs when usinmg a full pathname in place of "myScheme". Any ideas would be appreciated. Mike Gigante mg%cidam.oz@seismo.css.gov munnari!cidam.oz!mg@seismo.css.gov Royal Melbourne Institute of Technology, Australia  Received: from G.BBN.COM (TCP 30000201103) by MC.LCS.MIT.EDU 17 Mar 87 17:10:12 EST Date: 17 Mar 1987 16:40-EST Sender: SUSSMAN@G.BBN.COM Subject: Re: Question: are theres ANY VIDEO TAPES available for Scheme ? From: SUSSMAN@G.BBN.COM To: shneider%cui.unige.chunet@RELAY.CS.NET Cc: scheme@MC.LCS.MIT.EDU Message-ID: <[G.BBN.COM]17-Mar-87 16:40:17.SUSSMAN> In-Reply-To: <203:shneider@cui.unige.chunet> There is a videotaped version of 6.001. You should contact CAES (The Center for Advanced Engineering Study) about availability and price. There may be better prices for universities than for industry -- I don't know anything about pricing. I think that Hewlett Packard is supplying the tapes to U.S. universities, but I don't know about foreign universities. CAES might know more about this too. Julie Sussman  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 17 Mar 87 11:39:27 EST Date: Tue, 17 Mar 87 11:38:33 EST From: Jonathan A Rees Subject: Revised^3 Report on Scheme; administrivia To: zs01#@ANDREW.CMU.EDU cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Mon 16 Mar 87 23:05:57 est from zs01# at andrew.cmu.edu (Zalman Stern) Message-ID: <169681.870317.JAR@AI.AI.MIT.EDU> Date: Mon, 16 Mar 87 23:05:57 est From: zs01# at andrew.cmu.edu (Zalman Stern) To: scheme-request at mit-mc Could you please send me the "standard information packet" as advertised in the above message. I omitted to say that people on Internet can FTP this from host MIT-MC. It's in file "LSPMAI; SCHEME IMPLS". Back message are in "LSPMAI; SCHEME MAIL" on MIT-MC and even older messages are in "LSPMAI; SCHEME MAIL1" on MIT-AI. If you don't have FTP access to the Internet, I'm willing to send the list of implementations. I won't mail the archives, they're too big.  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 16 Mar 87 22:59:43 EST Date: Mon, 16 Mar 87 22:59:01 EST From: Jonathan A Rees Subject: Request for public domain Scheme programs To: scheme@MC.LCS.MIT.EDU Message-ID: <169444.870316.JAR@AI.AI.MIT.EDU> Date: Mon 16 Mar 87 18:57:21-MST From: Raul Machuca To: scheme-request at MC.LCS.MIT.EDU Are there any public domain scheme pgrams that can be ftp'd, in particular for TI PC Scheme?  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 16 Mar 87 17:51:05 EST Date: Mon, 16 Mar 87 17:49:49 EST From: Jonathan A Rees Subject: Revised^3 Report on Scheme; administrivia To: Dan@CIS.UPENN.EDU, scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Mon 16 Mar 87 13:46 EST from Dan Zigmond Message-ID: <169287.870316.JAR@AI.AI.MIT.EDU> Date: Mon, 16 Mar 87 13:46 EST From: Dan Zigmond To: scheme at mc.lcs.mit.edu Re: Revised Revised Revised Report on Scheme How does one get a copy of this new spec? Is it FTPable from somewhere? It's in ACM SIGPLAN Notices, December 1986. You can also get it from the MIT AI Lab Publications Office, 545 Technology Square, Cambridge MA 02139, for $6.00, prepaid; ask for AI Memo 848a. If you want the LaTeX sources, you can get them from MIT-PREP:/scheme/r3rs.tar (that's a Unix "tar" file), but I think you're better off dealing with the hardcopy, unless you want to modify it. Attention new arrivals to the list: rather than bother everyone on the list with requests like this for basic information which has a high probability of having already been posted, please send your easy questions to Scheme-Request@MIT-MC. In particular, I can send you a compendium of implementation announcements, consisting of messages which have been sent to this list. Don't get upset if a week or two goes by without an answer from me, since I tend to deal with scheme-request messages in batches; be patient. Implementors & others: if you want to add or change things in this standard information packet I send out, please let me know. One last thing: I would like for people to get in the habit of sending mail pertaining to the Scheme mailing list to Scheme-Request, not to me personally. This is both to make my own record-keeping easier (messages sent to Scheme-Request are archived) and to be prepared in case someone else ever takes over management of the list either temporarily or permanently. Thanks Jonathan  Received: from linc.cis.upenn.edu (TCP 1201000140) by MC.LCS.MIT.EDU 16 Mar 87 13:49:53 EST Received: by linc.cis.upenn.edu id AA04208; Mon, 16 Mar 87 13:44:04 EST Posted-Date: Mon, 16 Mar 87 13:46 EST Message-Id: <8703161844.AA04208@linc.cis.upenn.edu> From: Dan Zigmond Subject: Revised Revised Revised Report on Scheme To: scheme@mc.lcs.mit.edu Date: Mon, 16 Mar 87 13:46 EST How does one get a copy of this new spec? Is it FTPable from somewhere? Dan  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 12 Mar 87 06:56:01 EST Received: from relay2.cs.net by RELAY.CS.NET id aa08863; 12 Mar 87 6:52 EST Received: from switzerland by RELAY.CS.NET id aa00256; 12 Mar 87 6:45 EST Received: from ean by SWITZERLAND.CSNET id a017020; 12 Mar 87 12:37 WET From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at SWITZERLAND.CSNET Message-ID: <203:shneider@cui.unige.chunet> Subject: Question: are theres ANY VIDEO TAPES available for Scheme ? We heard that there were some video tapes around which teach programming in Scheme (maybe some MIT "6.001" lessons). If #T, (1) where could I get them ? (2) for what price (incl. handling, mail to Switzerland) ? Thanks for any help ! -- Daniel K.Schneider ISSCO, University of Geneva, 54 route des Acacias, 1227 Carouge (Switzerland) Tel. (..41) (22) 20 93 33 ext. 2114 to VMS/BITNET: to UNIX/EAN (preferable): BITNET: SCHNEIDE@CGEUGE51 shneider%cui.unige.chunet@CERNVAX ARPA: SCHNEIDE%CGEUGE51.BITNET@WISCVM shneider@cui.unige.CHUNET or: shneider%cui.unige.chunet@ubc.csnet uucp: mcvax!cernvax!cui!shneider  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 11 Mar 87 13:56:25 EST Received: from relay2.cs.net by RELAY.CS.NET id aa02343; 11 Mar 87 13:34 EST Received: from indiana by RELAY.CS.NET id ad25226; 11 Mar 87 13:28 EST Date: Wed, 11 Mar 87 12:30:00 est From: Chris Haynes To: scheme@MC.LCS.MIT.EDU Subject: Scheme 84 Scheme 84 compiles source to an intermediate s-expression code, which is then interpreted by a Virtual Scheme Machine (VSM) written in compiled Franz Lisp. This note outlines the relative merits of Scheme 84. ADVANTAGES: -- COST: It is FREE, available via anonymous ftp on arpanet as directory pub/scheme84 on iucs.cs.indiana.edu (since we are new to arpanet, you may have to use 192.12.206.205), or send a tape to Nancy Garrett Lindley Hall Bloomington, IN 47405. It will be returned with Scheme 84 in Unix tar format, with an Indiana University Computer Science Department Technical Report that documents the language. Scheme 84 was developed under Berkley Unix, but also runs under VMS if you have Franz Lisp. -- PORTABILITY: It is very easy to port Scheme 84 to any machine that runs Franz Lisp. Without much difficulty it could also be ported to run under other Lisp systems, such as Common Lisp or PSL. Only a small set of Lisp features are used. -- MALEABILITY: It is easy to modify. Many interesting features can be added to Scheme 84 with only a few hours (or even minutes) of work. The entire Scheme 84 implementation can be digested easily in a few days. We have found this to be of great value in our research. For example, engines, an abstraction of timed preemption [Haynes and Friedman 84], was first implemented in Scheme 84. It is particularly easy to import Franz Lisp features into Scheme. This has been used, for example, to implement a Semantic Prototyping System [Wand 84] with hooks to Lex and Yacc. DISADVANTAGES: -- SPEED: It is much slower than Scheme implementations based on native code compilation, such as Chez Scheme or T. However, the intermediate code and VSM were carefully designed to get the most out of the Franz compiler so that Scheme 84 is comparable in speed to other interpreted Scheme implementations. -- FRANZ FOIBLES: A few unfortunate features of Franz Lisp show through. For example, some run time errors are caught by Franz, not Scheme, and result in inappropriate error messages (though Scheme 84 always recovers control). -- STANDARDIZATION: Scheme 84 is fairly close to the Scheme standard [Rees and Clinger 86], but has not been brought completely up to date. (Any volunteers?) [Rees and Clinger 86] Rees, J., and Clinger, W., Revised Report on the Algorithmic Language Scheme, SIGPLAN Notices 21:12, pp. 37-79 (1986). [Haynes and Friedman 84] Haynes, C.T., and Friedman, D.P., Engines build process abstractions, Conf. Rec. of the 1984 ACM Symposium on Lisp and Functional Programming, pp. 18-24. [Wand 84] Wand, M., A semantic prototyping system, Proc. ACM SIGPLAN '84 Compiler Construction Conference, pp. 213-221.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 10 Mar 87 18:31:25 EST Received: from relay2.cs.net by RELAY.CS.NET id ac24159; 10 Mar 87 17:36 EST Received: from indiana by RELAY.CS.NET id af19280; 10 Mar 87 17:32 EST Date: Tue, 10 Mar 87 16:01:55 est From: Chris Haynes To: vanroggen%bach.dec@DECWRL.DEC.COM, scheme@MC.LCS.MIT.EDU Scheme 84 compiles source to an intermediate s-expression code, which is then interpreted by a Virtual Scheme Machine (VSM) written in compiled Franz Lisp. This note outlines the relative merits of Scheme 84. ADVANTAGES: -- COST: It is FREE, available via anonymous ftp on arpanet as directory pub/scheme84 on iucs.cs.indiana.edu (since we are new to arpanet, you may have to use 192.12.206.205), or send a tape to Nancy Garrett Lindley Hall Bloomington, IN 47405. It will be returned with Scheme 84 in Unix tar format, with an Indiana University Computer Science Department Technical Report that documents the language. Scheme 84 was developed under Berkley Unix, but also runs under VMS if you have Franz Lisp. -- PORTABILITY: It is very easy to port Scheme 84 to any machine that runs Franz Lisp. Without much difficulty it could also be ported to run under other Lisp systems, such as Common Lisp or PSL. Only a small set of Lisp features are used. -- MALEABILITY: It is easy to modify. Many interesting features can be added to Scheme 84 with only a few hours (or even minutes) of work. The entire Scheme 84 implementation can be digested easily in a few days. We have found this to be of great value in our research. For example, engines, an abstraction of timed preemption [Haynes and Friedman 84], was first implemented in Scheme 84. It is particularly easy to import Franz Lisp features into Scheme. This has been used, for example, to implement a Semantic Prototyping System [Wand 84] with hooks to Lex and Yacc. DISADVANTAGES: -- SPEED: It is much slower than Scheme implementations based on native code compilation, such as Chez Scheme or T. However, the intermediate code and VSM were carefully designed to get the most out of the Franz compiler so that Scheme 84 is comparable in speed to other interpreted Scheme implementations. -- FRANZ FOIBLES: A few unfortunate features of Franz Lisp show through. For example, some run time errors are caught by Franz, not Scheme, and result in inappropriate error messages (though Scheme 84 always recovers control). -- STANDARDIZATION: Scheme 84 is fairly close to the Scheme standard [Rees and Clinger 86], but has not been brought completely up to date. (Any volunteers?) [Rees and Clinger 86] Rees, J., and Clinger, W., Revised Report on the Algorithmic Language Scheme, SIGPLAN Notices 21:12, pp. 37-79 (1986). [Haynes and Friedman 84] Haynes, C.T., and Friedman, D.P., Engines build process abstractions, Conf. Rec. of the 1984 ACM Symposium on Lisp and Functional Programming, pp. 18-24. [Wand 84] Wand, M., A semantic prototyping system, Proc. ACM SIGPLAN '84 Compiler Construction Conference, pp. 213-221.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 9 Mar 87 03:43:54 EST Received: from relay2.cs.net by RELAY.CS.NET id aa08194; 9 Mar 87 3:39 EST Received: from waterloo by csnet-relay.csnet id aa08421; 9 Mar 87 3:32 EST Received: from cantuar.uucp by watmath; Mon, 9 Mar 87 02:27:15 est Date: Mon, 9 Mar 87 10:25:37+1200 From: "W. Kreutzer" To: SCHEME@MC.LCS.MIT.EDU, mg <@RELAY.CS.NET,@cidam.rmit.oz,@munnari.csnet:mg@SEISMO.CSS.GOV> Subject: Re: distribution list yes, we are on the MIT scheme news list. If there is a cheaper way to get the stuff from you, we are interested. Thanks --- w. kreutzer, computer science, university of canterbury christchurch, new zealand ---  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 6 Mar 87 09:32:00 EST Received: from munnari.oz by seismo.CSS.GOV (5.54/1.14) with UUCP id AA03842; Thu, 5 Mar 87 22:41:38 EST Message-Id: <8703060341.AA03842@seismo.CSS.GOV> Received: from cidam (via goanna) by munnari with SunIII (5.5) id AA29000; Fri, 6 Mar 87 14:28:07 EST Received: by cidam.rmit.oz (4.3+RMIT/4.7) id AA18877; Fri, 6 Mar 87 10:24:09 EST Date: Fri, 6 Mar 87 10:24:09 EST From: munnari!cidam.rmit.oz!mg@seismo.CSS.GOV (Mike A. Gigante) To: SCHEME@mc.lcs.mit.edu Subject: distribution list There is now a distribution list here in Australia. For anyone else receiving the list direct, send your details to scheme-request@cidam.oz (Australia only) Mike Gigante, munnari!cidam.oz!mg@seismo.css.gov  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 5 Mar 87 15:22:02 EST Received: from relay2.cs.net by RELAY.CS.NET id ae08210; 5 Mar 87 12:28 EST Received: from northeastern.edu by RELAY.CS.NET id ah02163; 5 Mar 87 12:23 EST Received: from corwin.ccs.northeastern.edu by nuhub.acs.northeastern.edu; Thu, 5 Mar 87 09:51 EST Received: by corwin.CCS.Northeastern.EDU (5.51/5.17) id AA00230; Thu, 5 Mar 87 09:23:39 EST Date: Thu, 5 Mar 87 09:23:39 EST From: wand%corwin.ccs.northeastern.edu@RELAY.CS.NET To: scheme@MC.LCS.MIT.EDU Subject: Tiny Object System OK, here is my entry in the "smallest pedagogical OOPS". It is not quite as refined as I would like, but it's close. Note that flavors and operations (methods) are first-class citizens, more or less: in particular, messages are NOT quoted symbols. -- Mitch Wand (wand@corwin.ccs.northeastern.edu) ;;; A Toy Flavors System in Scheme, based on Generic Functions ;;; or, Object-Oriented Programming without Objects ;;; In this version, we introduce a functional model of operations. ;;; Definitions of data structures: ;;; flavor = ([parent|nil] . instance-names) ; cons-cell is hash code for unique flavor (test equality of flavors ; with eq?) ; instance-names are all required fields, beginning with ancestors and ; concluding with local names) ;;; instance = (flavor . instance-values) ;;; method = (cell operation) ; the cell is probably superfluous. ;;; operation = instance->flavor->operation->fcn ;;; An operation takes 3 arguments: the INSTANCE, the FLAVOR of which ;;; it is supposed to be an instance, and another OPERATION (to be ;;; invoked upon inheritance), and produces a FCN to be applied to the ;;; instance. ;;; fcn = lambda (self af1 ... af_k lf_1 ... lf_n . extra-fields) . ;;; lambda (param_1 ... param_p) . M ;;; The point is that the fcn might be applied to an instance of a ;;; DESCENDENT of this flavor, so it will be a record consisting of ;;; the fields of this flavor (af_1 .. lf_n), plus some additional ;;; fields. ;;; Data Structures (define make-cell (lambda (v) (cons v nil))) (define deref-cell car) (define set-cell! set-car!) (define fl->parent cadr) (define fl->instance-names cddr) (define mk-fl (lambda (parent names) (cons '&flavor (cons parent names)))) (make-unprintable '&flavor ') (define inst->flavor car) (define inst->values cdr) (define mk-inst cons) ;;; Functional Core (define make-flavor (lambda (parent new-names) (mk-fl parent (append (fl->instance-names parent) new-names)))) ;;; here is the empty method. It tries to invoke inheritance if it ;;; can. The third argument is the method to be used if inheritance ;;; is to be followed. Note the implicit Y operator in the last line. (define empty-method (lambda (instance flavor whole-method) (let ((parent (fl->parent flavor))) (if (null? parent) (error "Couldn't apply method" whole-method instance) (whole-method parent instance whole-method))))) (define make-method (lambda () (make-cell empty-method))) ;;; here is how we add a new "unit method" to an existing method. ;;; This is just the familiar notion of functional extension EXCEPT ;;; for the whole-method argument. This is passed along as we search ;;; for an applicable method, and is eventually used by empty-method ;;; to invoke inheritance. (define cons-composite-method (lambda (new-flavor new-fcn old-method) (lambda (instance flavor whole-method) (if (eq? flavor new-flavor) (apply new-fcn (cons instance (inst->values instance))) (old-method flavor instance whole-method))))) (define add-method! (lambda (method flavor fcn) (set-cell! method (cons-composite-method flavor fcn (deref-cell method))))) ;;; Next we write some user-interfaces ; the null flavor has no parent and no fields (define null-flavor '(nil)) ; define new flavors with define-flavor (extend-syntax (define-flavor) [(define-flavor name parent instance-name ...) (define name (make-flavor (if (null? parent) null-flavor parent) '(instance-name ...)))]) ; make new instances with make-instance. Put parent values first, ; then local values. This could use call-by-keyword, with a SMOP. (extend-syntax (make-instance) [(make-instance flavor values ...) (list flavor values ...)]) ; make new methods with define-method (extend-syntax (define-method) [(define-method name) (define name (make-method))]) ; add options to methods with add-method (define expand-add-method (lambda (exp) (record-case exp [add-method (method flavor params body) (let ([bvl (cons 'self (append (fl->instance-names (execute (compile flavor))) 'extras))]) `(begin (add-method! ,method ,flavor (lambda ,bvl (lambda ,params ,body))) ',method))]))) (macro add-method expand-add-method) ;;; apply-method is the user-level invocation of methods. It ;;; evaluates and dereferences its method and object arguments exactly ;;; once. Notice how real-method is passed as the third argument to ;;; itself in order to initiate the inheritance search loop. (extend-syntax (apply-method) [(apply-method method object arg ...) (let ((real-method (deref-cell method)) (real-object object)) ((real-method (inst->flavor real-object) real-object real-method) arg ...))]) ;;; Just for laughs, here is a general setter: (define-method :set) (add-method :set null-flavor (name val) (iterate loop ([names (fl->instance-names (inst->flavor self))] [vals (inst->values self)]) (cond [(null? names) (error "cannot set " name)] [(eqv? (car names) name) (set-car! vals val) val] [else (loop (cdr names) (cdr vals))]))) (define-method :run-super) (add-method :run-super null-flavor (method) (let ((parent (fl->parent (inst->flavor self)))) (if (null? parent) (error "no super") (apply-method method (mk-inst parent (inst->values self)))))) ;;; and here is a test file: (define-flavor terminal () val) (define-flavor Ident terminal) (define-flavor Number terminal) (define-flavor Compound () Operator argument1 argument2) (define-flavor MulSym ()) (define-flavor AddSym ()) (define-method :eval) (add-method :eval Number () val) (add-method :eval Compound () (apply-method :operator-result Operator (apply-method :eval argument1) (apply-method :eval argument2))) (define-method :operator-result) (add-method :operator-result MulSym (v1 v2) (* v1 v2)) (add-method :operator-result AddSym (v1 v2) (+ v1 v2)) (define test1 (lambda () (let* ([mulsym (make-instance MulSym)] [addsym (make-instance AddSym)] [obj1 (make-instance Compound addsym (make-instance Number 5) (make-instance Number 7))]) (writeln (apply-method :eval obj1) " = " 12) (apply-method :set obj1 'Operator mulsym) (writeln (apply-method :eval obj1) " = " 35))))  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 5 Mar 87 15:12:38 EST Received: from relay2.cs.net by RELAY.CS.NET id ai07823; 5 Mar 87 11:26 EST Received: from waterloo by csnet-relay.csnet id aq01858; 5 Mar 87 11:22 EST Received: from cantuar.uucp by watmath; Wed, 4 Mar 87 23:42:05 est Date: Thu, 5 Mar 87 11:21:57+1200 From: "W. Kreutzer" To: scheme@MC.LCS.MIT.EDU, bc@MEDIA-LAB.MEDIA.MIT.EDU Subject: Re: OOPSs for Scheme, MacScheme If you get an answer to that question I would be interested in it. We have a locally developed class and flavour package for ChezScheme, if that is any help. So far I have not got around to port it to MacScheme. --- wolfgang kreutzer, computer science, University of Canterbury, New Zealand ---  Received: from hera.CS.UCLA.EDU (TCP 20030201024) by MC.LCS.MIT.EDU 4 Mar 87 21:02:52 EST Received: by hera.CS.UCLA.EDU (Sendmail 5.54/5.14) id AA17690; Wed, 4 Mar 87 17:14:39 PST Date: Wed, 4 Mar 87 17:14:39 PST From: cpd@CS.UCLA.EDU (Charles Dolan) Message-Id: <8703050114.AA17690@hera.CS.UCLA.EDU> To: JAR@ai.ai.mit.edu, bc@media-lab.media.mit.edu Subject: Re: r^2 vs. r^3 Cc: scheme@mc.lcs.mit.edu Here is a small objected oriented system which I wrote one day to see how small I could make it. It does single inheritence. Objects and classes are procedures. New instances are created by send a class object the message NEW. SUPER is a smalltalk style pseudo instance which calls the method dispatcher for the class one higher in the heirarchy. The DEFINE-METHOD macro walks the code for the message and replaces varaible references and sets with VECTOR-REFs and VECTOR-SET!s for a vector of instance variables. This code was written using a library of utility functions I use. I have attempted to remove all those references. Sorry for the lack of comments, this is almost a pedagogical example. (define *metamethod-offset* 0) (define *method-offset* 1) (define *parent-offset* 2) (define *ivs-offset* 3) (macro define-class (lambda (dummy class parent ivs cvs) (set! ivs (combine-var-lists (if parent (property parent 'ivs) nil) ivs)) (set! cvs (combine-var-lists (if parent (property parent 'cvs) nil) (append '(metamethods methods parent ivs) cvs))) `(set! ,class (begin (set-property! ',class 'ivs ',ivs) (set-property! ',class 'cvs ',cvs) (make-class-object ,parent ',ivs ',cvs))) (define (combine-var-lists l1 l2) (letrec ((combine (lambda (l1 l2) (if (null? l2) (reverse l1) (if (memq (car l2) l1) (combine l1 (cdr l2)) (combine (cons (car l2) l1) (cdr l2))))))) (combine (reverse l1) l2))) (macro define-metamethod (lambd (dummy class spec . body) (let ((message (car spec)) (arg-spec (cdr spec))) `(add-metamethod-to-class-object ,class ',message (lambda (self class %%method-object %%var-vector ,@arg-spec) ,@(walk-code-and-replace-variables body (property class 'cvs)))))) (define (make-class-object parent ivs cvs) (let ((cv-vector (make-vector (length cvs))) (class-object nil)) (vector-set! cv-vector *metamethods-offset* (list 'metamethods)) (vector-set! cv-vector *methods-offset* (list 'methods)) (vector-set! cv-vector *parent-offset* parent) (vector-set! cv-vector *ivs-offset* ivs) (set! class-object (lambda (message . args) (cond ((eq? message 'cv-vector) cv-vector) ((eq? message 'class-object?) t) (T (dispatch-metamethod class-object class-object message args cv-vector))))))) (define (add-metamethod-to-class-object class-object message func) (let* ((a-list (vector-ref (class-object 'cv-vector) *metamethod-offset*)) (pair (assq message (cdr a-list)))) (if pair (set-cdr! pair func) (set-cdr! a-list (cons (cons message func) (cdr a-list)))))) (define (dispatch-metamethod class-object method-object message args cv-vector) (let* ((method-vector (if (null? method-object) (cerror "No metamethod" message args) (method-object 'cv-vector))) (pair (assq message (cdr (vector-ref method-vector *metamethod-offset*))))) (if pair (apply (cdr pair) (cons class-object (cons () (cons method-object (cons cv-vector args))))) (dispatch-metamethod class-object (vector-ref method-vector *parent-offset*) message args cv-vector)))) (define (walk-code-and-replace-variables expr vars) (cond ((symbol? expr) (if (memq expr vars) `(vector-ref %%var-vector ,(nth-inv vars expr)) expr)) ((atom? expr) expr) ((pair? expr) (cond ((eq? (car expr) 'quote) expr) ((eq? (car expr) 'set!) (if (memq (cadr expr) vars) `(vector-set! %%var-vector ,(nth-inv vars (cadr expr)) ,(walk-code-and-replace-variables (caddr expr) vars)) expr)) (T (cons (walk-code-and-replace-variables (car expr) vars) (walk-code-and-replace-variables (cdr expr) vars))))))) (macro define-method (lambda (dummy class spec . body) (let ((message (car spec)) (arg-spec (cdr spec))) `(add-method-to-class-object ,class ',message (lambda (self class %%method-object %%var-vector ,@arg-spec) ,@(walk-code-and-replace-variables body (property class 'ivs)))))) (define (add-method-to-class-object class-object message func) (let* ((a-list (vector-ref (class-object 'cv-vector) 1)) (pair (assq message (cdr a-list)))) (if pair (set-cdr! pair func) (set-cdr! a-list (cons (cons message func) (cdr a-list)))))) (define (make-instance-object class-object) (let ((iv-vector (make-vector (length (vector-ref (class-object 'cv-vector) *iv-offset*)))) (instance-object nil)) (set! instance-object (lambda (message . args) (cond ((eq? message 'iv-vector) iv-vector) ((eq? message 'class-object?) nil) (T (dispatch-method class-object class-object message args instance-object iv-vector))))) instance-object)) (define (dispatch-method class-object method-object message args instance-object iv-vector) (let* ((cv-vector (if (null? method-object) (cerror "No method" message args) (method-object 'cv-vector))) (pair (assq message (cdr (vector-ref cv-vector *methods-offset*))))) (if pair (apply (cdr pair) (cons instance-object (cons class-object (cons method-object (cons iv-vector args))))) (dispatch-method class-object (vector-ref cv-vector *parent-offset*) message args instance-object iv-vector)))) (macro super (lambda (dummy message . args) `(dispatch-super class %%method-object ,message (list ,@args) self %%var-vector)) (define (dispatch-super class-object method-object message args instance-object iv-vector) (let ((parent (vector-ref (method-object 'cv-vector) *parent-offset*))) (if (null? parent) (cerror "No super-method or super-metamethod" message args) (if (null? (instance-object 'class-object?)) (dispatch-method class-object parent message args instance-object iv-vector) (dispatch-metamethod instance-object parent message args iv-vector))))) ; A little documentation ; ; (DEFINE-CLASS class-name parent instance-variables class-variables) ; (DEFINE-METHOD class-name (method-name . args) . body) ; (DEFINE-METAMETHOD class-name (method-name . args) . body) ; ; Here is a small example ; ; (DEFINE-CLASS NEW-CLASS () (NAME) (INSTANCE-COUNT)) ; ; (DEFINE-METAMETHOD NEW-CLASS (NEW) ; (LET ((NEW-OBJECT (SUPER 'NEW))) ; (SET! INSTANCE-COUNT (1+ INSTANCE-COUNT)) ; OBJECT)) ; ; (DEFINE-METAMETHOD NEW-CLASS (GET-INSTANCE-COUNT) ; INSTANCE-COUNT) ; ; (DEFINE-METHOD NEW-CLASS (SET-NAME NEW-NAME) ; (SET! NAME NEW-NAME)) ; ; (DEFINE-CLASS ANOTHER-NEW-CLASS (NEW-CLASS () ()) ; ; (DEFINE-METHOD ANOTHER-NEW-CLASS (SET-NAME NEW-NAME) ; (SUPER 'SET-NAME NEW-NAME) ; (DISPLAY NEW-NAME) ; (NEWLINE)) Enjoy, comments welcome, flame to yourself. -Charlie Dolan  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 4 Mar 87 14:23:08 EST Date: Wed, 4 Mar 87 14:23:07 EST From: Jonathan A Rees Subject: r^2 vs. r^3 To: bc@MEDIA-LAB.MEDIA.MIT.EDU cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Wed 4 Mar 87 11:19:50 EST from bill coderre Message-ID: <163107.870304.JAR@AI.AI.MIT.EDU> Date: Wed, 4 Mar 87 11:19:50 EST From: bill coderre ONE: What are the significant differences between the Revised2 and Revised3 Reports on Scheme? The changes in the language are mostly trivial. I'd say the most visible changes are (1) the boolean constants are written #T and #F instead of #!TRUE and #!FALSE and (2) a number of peripheral and/or redundant features have been removed or simplified. As for the report itself, the R^3 report has some additional description, e.g. formal semantics & syntax, and its organization is somewhat different in places. For completeness, I'll list all the changes of which I'm aware, not just the significant ones. This list appears in the "notes" section of the r^3 report. What constitutes a "clarification" as opposed to an "incompatible change" is subjective; this is my own classification, not that of the (other) authors. New features: - DELAY and FORCE (as in Abelson & Sussman's book) - New predicates BOOLEAN? and PROCEDURE? - ATAN now admits either one or two arguments. - ^ is now extended alphabetic. Features removed: - NAMED-LAMBDA and REC are both gone. - "Curried define", e.g. (define (((f x) y z) w) ...), has been removed. - A number of things had more than one name in the R^2 report; now everything has only one name. Thus SEQUENCE, =?, and > are gone. - A number of marginal procedures have been flushed, namely: APPEND!, STRING-NULL?, SUBSTRING-FILL!, SUBSTRING-MOVE-LEFT! SUBSTRING-MOVE-RIGHT!, OBJECT-HASH, OBJECT-UNHASH, 1+, and -1+. - The #!NULL syntax for the empty list is gone (use () instead). Incompatible changes: - The boolean constants are now written #t and #f instead of #!true and #!false. - (define (foo ...) ...) now means (define foo (lambda (...) ...)) instead of (define foo (letrec ((foo (lambda (...) ...))) foo)). Technical clarifications: [In many of these cases, the r^2 report was at variance with what the way various implementations behaved, and it seemed better to change the report than to change the implementations.] - The objects returned by literal expressions (e.g. '(a b)) are permitted to be immutable. - The list to which a rest-argument becomes bound must be newly allocated. - DO variables are updated by rebinding rather than by assignment. - Backquote allows vectors and nesting, and there's an official read/print syntax for backquoted forms (so you can know what you get if you say '`(a ,b) ). - EQ? on equal numbers is unspecified. - Implementations are permitted to do things like (EQ? (LAMBDA (X) X) (LAMBDA (Y) Y)) => #T. - EQV? distinguishes exact numbers from inexact ones, even if they are equal according to =. - List, string, and vector indexes must be exact integers. Someone else will have to answer your question number two. - Jonathan  Received: from MEDIA-LAB.MIT.EDU (TCP 2225200002) by MC.LCS.MIT.EDU 4 Mar 87 12:01:39 EST Received: by MEDIA-LAB.MIT.EDU (5.54/4.8) id AA28819; Wed, 4 Mar 87 11:19:50 EST Date: Wed, 4 Mar 87 11:19:50 EST From: bill coderre Message-Id: <8703041619.AA28819@MEDIA-LAB.MIT.EDU> To: scheme@mc.lcs.mit.edu Subject: OOPSs for Scheme, MacScheme Two Questions. ONE: What are the significant differences between the Revised2 and Revised3 Reports on Scheme? TWO: I now have MacSheme, which looks pretty good. Recently I have been programming in a forthcoming Common Lisp which includes Gary Drescher's Object Lisp system. Is there a similar system around that wouldn't be hard to port to MacScheme? I don't think I'm a good enough hacker to implement one, or to do a major rewrite kind of port. (I don't need multiple inheritance, but I do need single inheritance, which isn't very obvious to me how to do.) Thank you for the help......................................bc  Received: from Xerox.COM (TCP 1200400040) by MC.LCS.MIT.EDU 26 Feb 87 07:56:20 EST Received: from Riesling.ms by ArpaGateway.ms ; 26 FEB 87 04:53:08 PST Sender: "Larry_Brooks.EdServices"@Xerox.COM Date: 26 Feb 87 04:43:20 PST (Thursday) Subject: Re: help -- set command From: "Larry_Brooks.EdServices"@Xerox.COM To: willc%tekchips.tek.com@RELAY.CS.NET cc: "Larry_Brooks.EdServices"@Xerox.COM, scheme@MC.LCS.MIT.EDU In-Reply-to: "willc%tekchips.tek.com%RELAY.CS.NET":GV:Xerox's message of 25 Feb 87 16:26 Message-ID: <870226-045308-2404@Xerox> Thanks for the information. It looks like going from Interlisp to Scheme is not quite as easy as I expected. I think part of my problem is learning to "think lexically". Your advice is much appreciated. By the way, TI's PCScheme does support dynamic variables and there are a couple of environment commands (I still need to learn what they do) avaliable also. Take care, Larry  Received: from Xerox.COM (TCP 1200400040) by MC.LCS.MIT.EDU 24 Feb 87 11:31:44 EST Received: from Riesling.ms by ArpaGateway.ms ; 24 FEB 87 08:28:57 PST Sender: "Larry_Brooks.EdServices"@Xerox.COM Date: 24 Feb 87 08:28:17 PST (Tuesday) Subject: help -- set command From: "Larry_Brooks.EdServices"@Xerox.COM To: scheme@MC.LCS.MIT.EDU cc: "Larry_Brooks.EdServices"@Xerox.COM Message-ID: <870224-082857-9076@Xerox> I recently purchased TI's PCScheme for the IBM PC. I have a question that I hope someone out there can answer for me. I would like to use a command that acts like "set" (i.e., evaluates both its arguments) in Interlisp. More specifically, I would like to do the following: (SETQ ALIST '(A B C)) {equivalent to set! or define} (SET (CAR ALIST) 'Z) {equivalent to ????} (EVAL (CAR ALIST)) {Should return Z} Neither define or set! evaluate their first arguments. Does anyone know of a function that will act like set in Interlisp or of an easy way around this problem? (I can think of awkward ways to get around it for specific applications, but I am looking for a nice generic fix.) Sorry if this question seems basic to the people on this DL, but I'm a beginner in both Lisp (a few months of experience) and Scheme (a week of experience). Thanks for any help, Larry  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 20 Feb 87 10:39:48 EST Date: Fri, 20 Feb 87 10:39:27 EST From: Jonathan A Rees Subject: [hay%ubc.csnet: no mail] To: scheme@MC.LCS.MIT.EDU Message-ID: <157166.870220.JAR@AI.AI.MIT.EDU> I don't have an answer to the following. Can anyone help? (This is a half-facetious question. My conjecture: people who like Scheme for its minimality like to have their mailing lists be that way too.) -Jonathan Date: 19 Feb 87 10:53 -0800 From: Marilyn Hay To: Scheme Co-ordinator Re: no mail I have noticed that there has not been any traffic on this list for some time. Is there any particular reason or has there just not been any submissions to the list? Thanks for any indication as to what has happened. Take care, Marilyn Hay University of British Columbia hay@ean.ubc.cdn hay@ubc.csnet hay%ubc.csnet@csnet-relay.arpa  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 25 Jan 87 21:34:00 EST Date: Sun, 25 Jan 87 21:32:13 EST From: Jonathan A Rees Subject: [vanroggen%bach.DEC: Looking for Lisps...] To: scheme@MC.LCS.MIT.EDU Message-ID: <144637.870125.JAR@AI.AI.MIT.EDU> Apologies to those of you who have seen this message already. I have nothing to do with this newsletter; I'm just forwarding this message because I thought people on the scheme list might be interested. - Jonathan Date: Tuesday, 20 Jan 1987 14:48:29-PST From: vanroggen%bach.DEC at decwrl.DEC.COM To: common-lisp at sail.stanford.edu, vanroggen%bach.DEC at decwrl.DEC.COM Re: Looking for Lisps... Message-Id: <8701202249.AA09113@decwrl.dec.com> As part of a feature of the LISP POINTERS newsletter, we'd like to collect descriptions of all currently available Lisp implementations. Any kind of Lisp is acceptable; it doesn't have to be Common Lisp or Scheme or Interlisp or MacLisp. It doesn't have to be a commercially supported product either; it can be free with no warranties whatsoever. If you're working on an implementation, and you're willing to describe it for everyone's benefit, send us at least the following information: Implementation Name Implemented to which standard (if any) Features (if no standard; see the suggested list of issues below) Additional Features (if implemented according to a standard) Missing Features (if implemented according to a standard) Current version/availability/prices Support (if supported, by whom; sources available?) Machine(s) Operating System(s) Source or Contact Any other comments Submitter's name, address, and net-address Some features you might want to comment on include: Predefined data types Name spaces and scopes and extents Control structures (e.g., special forms, non-local goto's, multiple values, multiple stacks, tasking, multi-processor support) Typing and declarations Garbage collection I/O functions Compiler Object-oriented support Graphics and windowing support Programming tools (e.g., graphics packages, editor interaction, system maintenance) Interaction with other languages AI-oriented tools (e.g., pattern matching, rules, database support, natural language interface) Any other interesting features Send this information to: Walter van Roggen Net address: VANROGGEN%BACH.DEC@DECWRL.DEC.COM Mail address: HLO2-3/E9, 77 Reed Rd, Hudson MA, 01749, USA  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 16 Jan 87 19:48:29 EST Date: Fri, 16 Jan 87 19:51:30 EST From: Jonathan A Rees Subject: [vanroggen%bizet.DEC: LISP POINTERS newsletter announcement] To: scheme@MC.LCS.MIT.EDU Message-ID: <141187.870116.JAR@AI.AI.MIT.EDU> Apologies to those of you who are on both SCHEME and COMMON-LISP. Date: Friday, 16 Jan 1987 06:42:06-PST From: vanroggen%bizet.DEC at decwrl.DEC.COM To: common-lisp at sail.stanford.edu, vanroggen%bizet.DEC at decwrl.DEC.COM Re: LISP POINTERS newsletter announcement Message-Id: <8701161443.AA21565@decwrl.dec.com> *** ANNOUNCEMENT *** LISP POINTERS We're putting together a newsletter and we'd like you to come along. Every other month, starting in March of 1987, Lisp Pointers will be bringing you articles, implementation summaries, opinion columns, and information on the lastest action on the standardization front. And we need you -- to contribute to our departments, to read the results of our efforts, and to suggest ways we can provide more of the kinds of information you want to see. Lisp Pointers is being funded by companies who care about the future of Lisp. The editorial content of the newsletter will not be influenced by these companies nor will the companies be responsible for the material contained within Lisp Pointers. Until such time as we affiliate with a more formal organization, subscriptions to Lisp Pointers will be free. Please spread the word among your friends, both real and electronic. Our newsletter will be available through the mails. To join our mailing list, send your name and address to: Mary S. Van Deusen, Editor IBM Research PO Box 704 Yorktown Heights, New York 10598 914-789-7845 617-384-2526 MAIDA@IBM.COM Contributions should be sent directly to the appropriate department: ***LETTERS TO THE EDITOR, NEWS ITEMS*** Mary S. Van Deusen (see above) ***IMPLEMENTATIONS*** Walter van Roggen DEC 77 Reed Road HL02-3/E9 Hudson, Massachusetts 01749 617-568-5617 VANROGGEN%BACH.DEC@DECWRL.DEC.COM ***BOOK REVIEWS, BIBLIOGRAPHIES*** Daniel Weinreb Symbolics, Inc. 11 Cambridge Center Cambridge, Massachusetts 02142 617-577-7500 DLW@MC.LCS.MIT.EDU ***X3J3 LISP STANDARDIZATION*** Robert F. Mathis 9712 Ceralene Drive Fairfax, Virginia 22032 703-425-5923 mathis@b.isi.edu ***USERS*** Susan Ennis Amoco Production Co. PO Box 3385 Tulsa, Oklahoma 74102 918-660-3588 ***TECHNICAL ARTICLES*** Jonl White Lucid, Inc. 707 Laurel Street Menlo Park, California 94025 415-329-8400 edsel!bhopal!jonl@navajo.stanford.edu ***ENVIRONMENTS*** John Foderaro Franz Inc. 1141 Harbor Bay Parkway Suite 270 Alameda, California 94501 415-769-5656 jkf%franz.uucp@berkeley.edu ***SCHEME*** Will Clinger M/S 50-662 Tektronics Inc. PO Box 500 Beaverton, Oregon 97077 willc%tekchips@tek.csnet 503-627-4675 ***LISP QUESTIONS*** Patrick Dussud Texas Instruments 12501 Research Boulevard MS 2201 Austin, Texas 78759 dussud%jenner%ti-csl.csnet@csnet-relay ***INTERNATIONAL ISSUES*** Christian Quiennec LITP 4 Place Jussieu F-75252, Paris Cedex 05 FRANCE tel: +33 (1) 43 36 25 25 x 5251 UUCP: ..!mcvax!inria!queinnec ARPA: mcvax!inria!queinnec@seismo.css.GOV  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 14 Jan 87 16:46:42 EST Date: Wed, 14 Jan 87 16:49:39 EST From: Jonathan A Rees Subject: test message To: scheme@MC.LCS.MIT.EDU Message-ID: <140295.870114.JAR@AI.AI.MIT.EDU> This is another of my test messages. You may safely ignore it. It's intended to try out various changes to the mailing list, weed out bad addresses, and assure those in doubt that they are still on the list even though they haven't received any mail from it in a while. There hasn't been much traffic lately. - Jonathan  Received: from WISCVM.WISC.EDU (TCP 20032201015) by MC.LCS.MIT.EDU 5 Jan 87 10:57:12 EST Received: from (NETWORK)FRSAC11.BITNET by WISCVM.WISC.EDU on 01/05/87 at 09:57:19 CST Date: Wed, 31 Dec 86 16:27:48 ZONE To: SCHEME@MC.LCS.MIT.EDU From: NETWORK%FRSAC11.BITNET@WISCVM.WISC.EDU Subject: SYMBOLIC COMPUTATION. NETWORK at FRSAC11 To: SCHEME at MC.LCS.M Does anybody know about a Scheme package to do symbolic computation ?? (a la Reduce, Macsyma...) P.S. I run CScheme on UTS/V. Happy new year. +--------------------------------------------------+ | Jean-Pierre H. Dumas | | Cisi-Telematique | | CEN Saclay, BP 24 | | 91190 Gif sur Yvette | | France | | | | Phone: +33 (1) 69 08 46 87 | | | | network@frsac11 (bitnet) | | network%frsac11.bitnet@wiscvm.wisc.edu (arpanet) | | ..!ihnp4!frsac11.bitnet!network (usenet ?)  | dumas@sumex-aim.stanford.edu (arpanet) | +--------------------------------------------------+  Received: from WISCVM.WISC.EDU (TCP 20032201015) by MC.LCS.MIT.EDU 31 Dec 86 13:37:15 EST Received: from (NETWORK)FRSAC11.BITNET by WISCVM.WISC.EDU on 12/30/86 at 14:48:44 CST Date: Tue, 30 Dec 86 19:30:47 ZONE To: SCHEME@MC.LCS.MIT.EDU From: NETWORK%FRSAC11.BITNET@WISCVM.WISC.EDU Subject: SCOOPS NETWORK at FRSAC11 To: SCHEME at MC.LCS.M I just got PC-SCOOPS, (by FTP, courtesy of TI), but I do not run PC-Scheme but CScheme.... Anybody can help ? (In CScheme there is the rrrs compatibility package... never tried it, but should be good.) Sincerly, +--------------------------------------------------+ | Jean-Pierre H. Dumas | | Cisi-Telematique | | CEN Saclay, BP 24 | | 91190 Gif sur Yvette | | France | | | | Phone: +33 (1) 69 08 46 87 | | | | network@frsac11 (bitnet) | | network%frsac11.bitnet@wiscvm.wisc.edu (arpanet) | | ..!ihnp4!frsac11.bitnet!network (usenet ?) | | dumas@sumex-aim.stanford.edu (arpanet) | +--------------------------------------------------+  Received: from OZ.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 8 DEC 86 12:06:32 EST Date: Mon, 8 Dec 1986 12:06 EST Message-ID: From: HAL%OZ.AI.MIT.EDU@XX.LCS.MIT.EDU To: Robert Muller Cc: scheme@MC.LCS.MIT.EDU Subject: IBM PC Scheme In-reply-to: Msg of 7 Dec 1986 08:41-EST from Robert Muller Texas instrument's PC scheme runs (barely) in 256K, but you can't use the editor.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 8 Dec 86 11:30:53 EST Received: from bu-cs.bu.edu by RELAY.CS.NET id aa00472; 8 Dec 86 11:03 EST Return-Path: Received: by bu-cs.bu.edu (5.31/4.7) id AA14034; Sun, 7 Dec 86 08:41:05 EST Date: Sun, 7 Dec 86 08:41:05 EST From: Robert Muller Message-Id: <8612071341.AA14034@bu-cs.bu.edu> To: scheme@MC.LCS.MIT.EDU Subject: IBM PC Scheme Does anyone know where I can pickup a version of Scheme that runs on the IBM PC (XT w only 256k)? thanks, - Bob Muller  Received: from AI.AI.MIT.EDU (CHAOS 3130) by MC.LCS.MIT.EDU 3 Dec 86 13:12:32 EST Date: Wed, 3 Dec 86 13:12:30 EST From: Jonathan A Rees Subject: Scheme redistribution for BITNET To: scheme@MC.LCS.MIT.EDU Message-ID: <125886.861203.JAR@AI.AI.MIT.EDU> I'm looking for someone on BITNET to volunteer to maintain a BITNET redistribution list for the Scheme@MC mailing list. This is necessary because the machine that's acting as the Internet/BITNET gateway, WISCVM.WISC.EDU, is swamped with mailing list mail. List administrators (like me) are being asked to set up redistribution lists to help lighten the load. If we can set one up for Scheme then WISCVM will only have to relay each message to one host instead of the current 11 or 12 (more in future). If you're willing and able to take this on, please let me know. Thanks... - Jonathan  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 25 Nov 86 16:04:51 EST Received: from ti-csl by csnet-relay.csnet id ae04601; 25 Nov 86 15:43 EST Received: from (home.ARPA) by tilde id AA24272; Tue, 25 Nov 86 14:05:13 cst Received: by id AA13329; Tue, 25 Nov 86 14:04:35 cst Date: Tue, 25 Nov 86 14:04:35 cst From: Clyde Camp Message-Id: <8611252004.AA13329@> To: SCHEME@MC.LCS.MIT.EDU Subject: PC Scheme Utilities For those of you interested in PCS, a set of free utilities with documentation is available from: Clyde R. Camp Texas Instruments, Inc. P.O.Box 226015, MS 238 Dallas, TX 75266 Send two blank, FORMATTED disks and a self-addressed, stamped envelope. Although written primarily for the TIPC, everything except the graphics should work on and of the IBM clones. The directories are: UTILITY - Various text windowing, file printing and keyboard handlers which simplify writing application programs (includes a file pretty-printer and a new top-level read-eval-print loop which uses an emacs-like line-editor with the capability to scroll back through previous entries) SWI - A convenient mechanism for invoking 8086 ASSY routines via the rather undocumented SWI-INT. HELP - A user-extendable on-line help facility which includes all of the PCS functions and syntax as well as other info GRAF - A object-style graphics package PLOT - A general prupose function plotter GAME1 - Self explanatory - non-graphics GAME2 - for TIPC graphics ERR_STAT - more utilities for messing with the status window MENUSHEL - two menu driven command shells This should also be available in ARC'd format on COMPUSERVE in the near future. - Clyde  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 18 NOV 86 12:12:03 EST Date: Tue, 18 Nov 86 12:14:33 EST From: Jonathan A Rees Subject: Scheme reports information request To: prlb2!vauclair@SEISMO.CSS.GOV cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of 18 Nov 86 10:50:34 N (Tue) from Marc Vauclair Message-ID: <[AI.AI.MIT.EDU].119770.861118.JAR> Date: 18 Nov 86 10:50:34 N (Tue) From: Marc Vauclair In the "Revised Revised Report on Scheme", I found the following two little sentences: on page 5: "Formal definitions of the lexical and context-free syntaxes of Scheme will be included in a separate report." on page 7: "A formal definition of the semantics of Scheme will be included in a separate report." Does those reports exist? Maybe using the same procedure as for the Revised^3 Report ? The "separate report" alluded to actually IS section 7 of the Revised^3 Report. So the answers are yes and yes, identically. Jonathan  Received: from geneva (TCP 2206400372) by MC.LCS.MIT.EDU 16 Nov 86 13:16:43 EST Received: by GENEVA.AI.MIT.EDU; Sun, 16 Nov 86 13:13:36 est Date: Sun, 16 Nov 86 13:13:36 est From: jinx@GENEVA.AI.MIT.EDU (Guillermo J. Rozas) Message-Id: <8611161813.AA03965@geneva> To: reddy@a.cs.uiuc.edu Cc: scheme@mit-mc.arpa In-Reply-To: Uday S. Reddy's message of Sat, 15 Nov 86 20:33:52 CST Subject: make-environment (long) I don't know if this is the right forum to raise this issue. But, I wonder why make-environment works the way it does. If I define (define (complex x y) (make-environment (define re x) (define im y))) (define a (complex 1 2)) not only does a have re and im bound in it, but it also has x and y bound in it. So, (access x a) yields 1. From the description of make-environment in Abelson and Sussman, it appears that only re and im should be bound in a. Is this a bug, or a feature, or am I missing something? If this is the way make-environment is supposed to work, is there some other primitive that binds re and im and forgets about x and y? You have misunderstood section 4.3.1 of S&ICP. If you read it carefully, you will notice "For use in conjunction with EVAL, Scheme provides an operation called MAKE-ENVIRONMENT that constructs an environment, evaluates a designated sequence of expressions within this environment, and returns the environment as the value of the MAKE-ENVIRONMENT expression. The enclosing environment of the new environment is the environment in which the MAKE-ENVIRONMENT expression was evaluated." The last sentence in the above quote makes it quite clear that this environment is built on top of the one in which the MAKE-ENVIRONMENT expression was evaluated, and therefore all these names are visible to EVAL. You ask about ACCESS, which is not in S&ICP, so I assume you are talking about MIT Scheme instead of the restricted subset used in S&ICP. There are two possibilities for ACCESS: Make it compatible with EVAL, and therefore make all the names (like X and Y in your example) visible. This is the current implementation. Make ACCESS look only at the "topmost" frame of the environment. This means that all the names that can be exported from a package must be defined in that package itself, and there is no "export" inheritance between packages built on top of packages. We tried the latter approach for a while and it was a total mess. We quickly changed it to its alternative.  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 15 Nov 86 22:04:55 EST Received: from ubc by csnet-relay.csnet id ab00818; 15 Nov 86 14:29 EST Date: Sat, 15 Nov 86 10:37:10 pst Received: by ubc.csnet id AA24381; Sat, 15 Nov 86 10:37:10 pst From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at RELAY.CS.NET Message-Id: <156:shneider@cui.unige.chunet> Subject: question: S&ICP teacher's manual and query language 1) We set up group here, disscussing the "structure and interpretation" book and we'd like to use it for teaching eventually. Where could I get the teacher's manual ? (Sorry, if this question has been asked before already) 2) I'd also like to obtain the updated version of the query langauge. I heard that I might get it from GJS, but I don't know his name and net address. Anybody does ? BIG thanks for any help ! ------------------------------------------------------------------------------- Daniel K.Schneider Departement de science politique, Universite de Geneve 1211 GENEVE 4 (Switzerland), Tel. (..41) (22) 20 93 33 ext. 2357 to VMS/BITNET: to UNIX/EAN (preferable): BITNET: SCHNEIDER@CGEUGE51 shneider%cui.unige.chunet@CERNVAX ARPA: SCHNEIDER%CGEUGE51.BITNET@WISCVM shneider%cui.unige.chunet@ubc.CSNET uucp: mcvax!cernvax!cui!shneider X.400/ean: shneider@cui.unige.chunet  Received: from RELAY.CS.NET (TCP 1201000005) by MC.LCS.MIT.EDU 15 Nov 86 22:04:10 EST Received: from ubc by csnet-relay.csnet id aa00818; 15 Nov 86 14:27 EST Date: Sat, 15 Nov 86 10:36:41 pst Received: by ubc.csnet id AA24378; Sat, 15 Nov 86 10:36:41 pst From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at RELAY.CS.NET Message-Id: <153:shneider@cui.unige.chunet> Subject: question: S&ICP teacher's manual and query language 1) We set up group here, disscussing the "structure and interpretation" book and we'd like to use it for teaching eventually. Where could I get the teacher's manual ? (Sorry, if this question has been asked before already) 2) I'd also like to obtain the updated version of the query langauge. I heard that I might get it from GJS, but I don't know his name and net address. Anybody does ? BIG thanks for any help !  Received: from a.cs.uiuc.edu (TCP 1200600045) by MC.LCS.MIT.EDU 15 Nov 86 21:33:07 EST Received: by a.cs.uiuc.edu (UIUC-5.44/9.7), id AA10732; Sat, 15 Nov 86 20:33:52 CST Date: Sat, 15 Nov 86 20:33:52 CST From: reddy@a.cs.uiuc.edu (Uday S. Reddy) Message-Id: <8611160233.AA10732@a.cs.uiuc.edu> To: scheme@mit-mc.arpa Subject: make-environment I don't know if this is the right forum to raise this issue. But, I wonder why make-environment works the way it does. If I define (define (complex x y) (make-environment (define re x) (define im y))) (define a (complex 1 2)) not only does a have re and im bound in it, but it also has x and y bound in it. So, (access x a) yields 1. From the description of make-environment in Abelson and Sussman, it appears that only re and im should be bound in a. Is this a bug, or a feature, or am I missing something? If this is the way make-environment is supposed to work, is there some other primitive that binds re and im and forgets about x and y? Uday Reddy  Received: from yale-celray.YALE.ARPA (TCP 20011000031) by MC.LCS.MIT.EDU 13 Nov 86 10:48:14 EST Received: by yale-celray.YALE.ARPA; Thu, 13 Nov 86 10:04:58 est Date: Thu, 13 Nov 86 10:04:58 est From: sieber-john@YALE.ARPA Message-Id: <8611131504.AA00353@yale-celray.YALE.ARPA> Subject: Add me to the list To: scheme@mc.lcs.mit.edu Would you please add me to the Scheme discussion? I was an undergraduate at Oberlin College where I was infected with the Scheme bug (flavored heavily by Indiana U. and the Dan Friedman school). Thanks, Jack Sieber sieber@yale.arpa ------- -------  Received: from OZ.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 9 NOV 86 11:47:16 EST Date: 9 Nov 1986 11:45 EST (Sun) Message-ID: From: Bill Rozas To: enea!tut!jh@SEISMO.CSS.GOV (Juha Hein{nen) Cc: scheme@MC.LCS.MIT.EDU Subject: eval and orbit In-reply-to: Msg of Fri 7 Nov 86 13:20:28 -0200 from enea!tut!jh at seismo.CSS.GOV (Juha Hein{nen) My program is supposed to read values of enumerated types (i.e. symbols) and then convert the symbols to their values. In regular Lisp I would write (eval (read)) to get the value but how am I supposed to do that in Scheme? Use a mapping function from names to values or is there a simpler way? Besides the fact that EVAL is not really necessary for most programming, the problem is that we could not agree on what eval would mean or do (we didn't try very hard because of the other reason): Some implementations have a single global environment where expressions could be evaluated. In these implementations (eval ) would make sense. Other implementations have multiple environments where code can be evaluated. In these implementations (eval ) does not make much sense. Eval needs to take a second argument specifying what environment to evaluate in, and it is not clear that a reasonable default can be provided so that 1 argument EVAL could work. You should use a mapping function or something like it if you want your code to be portable. Most implementations have an EVAL procedure (with different behavior) which you can use if you don't care about that.  Received: from MIT-MULTICS.ARPA (TCP 1200000006) by MC.LCS.MIT.EDU 8 Nov 86 15:57:21 EST Received: from UCLASSCF(MAILER) by MITVMA (Mailer X1.23) id 8286; Sat, 08 Nov 86 15:51:19 EST Received: by UCLASSCF (Mailer X1.23) id 3781; Sat, 08 Nov 86 12:41:14 PST Date: Sat, 08 Nov 86 12:39:12 PST From: REMARCK@UCLASSCF (Marc Kriguer) To: scheme@MC.LCS.MIT.EDU Subject: This account is scheduled to be deleted soon... And to avoid the last-minute rush, I have to start dropping myself from all the mailing lists I am on. Please remove my name from the scheme mailing list. Thank you very much! Marc Kriguer  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 7 NOV 86 20:46:45 EST Date: Fri, 7 Nov 86 20:48:46 EST From: Jonathan A Rees Subject: Hot off the press... To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].115925.861107.JAR> The new report is ready! Get them while they last! It's available in a handsome red binding from the MIT AI Lab publications office; the address is: Elizabeth Heepe Publications, Room NE43-818 MIT Artifical Intelligence Laboratory 545 Technology Square Cambridge MA 02139 Ask for MIT Artificial Intelligence Memo 848a, the "Revised^3 Report on the Algorithmic Language Scheme". Enclose a check for $6.00 per copy (U.S. funds) payable to the MIT Artificial Intelligence Laboratory. Prepayment is required. This version (dated September 1986) supersedes last summer's report, which was AI memo 848 (this one is 848a). It also supersedes (but is very similar to) the draft which was passed out at the Lisp and FP Conference in August. It is identical (same original) to the version that will be printed in SIGPLAN this December, except that in the MIT AI memo version it additionally includes a previously unpublished article by Abelson and Sussman entitled "Computation: An Introduction to Engineering Design". If you want to cite it, probably better to cite the SIGPLAN version since that will be available to a wider audience: Jonathan Rees and William Clinger, editors. "Revised^3 Report on the Algorthmic Language Scheme." SIGPLAN Notices 21(12), September 1986. The report will also appear as an Indiana University CSD Technical Report. Here is a brief summary of the more important differences between the 1985 and 1986 versions of the language: - Added: delay, force, boolean?, procedure? - Removed: #!null, rec, named-lambda, append!, object-hash, object-unhash, 1+, -1+, some of the string operators, "curried define" - Redundant names removed: sequence, =?, ?, >=? - Renamed: #!true -> #t, #!false -> #f - Changed: (define (foo ...) ...) now means (define foo (lambda (...) ...)), not (define foo (named-lambda (foo ...) ...)) Other, lesser, changes are enumerated in a special section on page 36. - Jonathan Rees  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 7 NOV 86 20:11:13 EST Date: Fri, 7 Nov 86 20:13:16 EST From: Jonathan A Rees Subject: Automatic removal from list... To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].115915.861107.JAR> Scheme@MC is a big mailing list. On average, one or two members become unreachable each week, due to changes in routing, gateways being down, etc. Be warned that I will ruthlessly remove from the list any recipients to whom mail is undeliverable. If you change your address, be sure to send a note to Scheme-Request@MC. If your machine has been down or off the net for a while (usually the various mail systems retry for three to seven days), and mail bounces as a result, you will likely be removed. This is the only way I'll be able to keep things under control and prevent people who send messages to Scheme from being deluged with enormous quantities of bounced mail. Just send me a message when you're back on, or if you think one of your gateways could have been down and you haven't seen a message for a couple of weeks. I sure hope that one of these days electronic mail will be able to reach people as reliably as physical mail does. The current state of the art of e-mail is quite inferior in the respect, probably at about the same point of development that physical mail was in about the 15th century. Jonathan  Received: from seismo.CSS.GOV (TCP 30003106431) by MC.LCS.MIT.EDU 7 Nov 86 06:46:47 EST Received: from enea.UUCP by seismo.CSS.GOV (5.54/1.14) with UUCP id AA25326; Fri, 7 Nov 86 06:45:33 EST Received: by enea.UUCP (5.51/UUCP-Project/rel-1.0/1.8) id AA01199; Fri, 7 Nov 86 12:26:05 +0100 (MET) Date: Fri, 7 Nov 86 13:20:28 -0200 From: enea!tut!jh@seismo.CSS.GOV (Juha Hein{nen) Return-Path: Message-Id: <8611071120.AA033441@tut.uucp> To: scheme@MC.LCS.MIT.EDU Subject: eval and orbit I asked to be put on this list a couple of weeks ago and haven't received any postings. Here comes mine as a test. 1. What is the rational in omitting eval from Scheme? My program is supposed to read values of enumerated types (i.e. symbols) and then convert the symbols to their values. In regular Lisp I would write (eval (read)) to get the value but how am I supposed to do that in Scheme? Use a mapping function from names to values or is there a simpler way? 2. Where can I get the Orbit Scheme compiler for my Sun-3 workstation? Juha Heinanen Tampere Univ. of Technology Finland  Received: from SUMEX-AIM.ARPA (TCP 1200000070) by MC.LCS.MIT.EDU 5 Nov 86 06:00:47 EST Date: Wed 5 Nov 86 02:48:18-PST From: Gunther Goerz Subject: [Gunther Goerz : CScheme for 68K] To: JAR@AI.AI.MIT.EDU, SCHEME@MC.LCS.MIT.EDU Message-ID: <12252466434.15.GOERZ@SUMEX-AIM.ARPA> Mail-From: GOERZ created at 24-Oct-86 03:24:44 Date: Fri 24 Oct 86 03:24:44-PDT From: Gunther Goerz Subject: CScheme for 68K To: scheme%mit-mc.csnet@RELAY.CS.NET cc: Goerz@SUMEX-AIM.ARPA Message-ID: <12249316417.13.GOERZ@SUMEX-AIM.ARPA> Patrick Greussay of the Univ of Paris 8 and LITP has implemented (at least one version of) SCHEME in C which is running on a variety of machines, including 68000 systems. --Guenther ------- -------  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 31 OCT 86 22:09:15 EST Date: Fri, 31 Oct 86 22:11:09 EST From: Jonathan A Rees Subject: Journal of Lisp and Symbolic Computation -- call for papers To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].113067.861031.JAR> Date: Fri, 31 Oct 86 12:34:05 PST From: edsel!sunvalleymall!jlz at navajo.stanford.edu (Jan Zubkoff) To: navajo!Common-lisp%sail at navajo.stanford.edu cc: sunvalleymall!jlz at navajo.stanford.edu Re: Call for Papers Message-Id: <8610312034.AA09846@sunvalleymall.edsel.uucp> LISP AND SYMBOLIC COMPUTATION: An International Journal 10/27/86 CALL FOR PAPERS LISP AND SYMBOLIC COMPUTATION: An International Journal (LASC) is a new journal published by Kluwer Academic Publishers. Richard P. Gabriel, Lucid, Inc. and Guy L. Steele Jr., Thinking Machines, Inc. are Editors-in-Chief. The aim of this new journal is to present a forum for current and evolving symbolic computing, focusing on LISP and object-oriented programming. The scope includes: * Programming language notations for symbolic computing (e.g., data abstraction, parallelism, lazy evaluation, infinite data objects, self-reference, message-passing, generic functions, inheritance, encapsulation, protection, metaobjects). * Implementations and techniques (e.g., specialized architectures, compiler design, combinatory models, garbage collection, storage management, performance analysis, smalltalks, flavors, common loops, etc.). * Programming logics (e.g., semantics and reasoning about programs, types and type inference). * Programming environments and tools (e.g., Knowledge-based programming tools, program transformations, specifications, debugging tools). * Applications and experience with symbolic computing (e.g., real-time programming, artificial intelligence tools, experience with LISP, object-oriented programming, window systems, user interfaces, operating systems, parallel/distributed computing. ! REQUIREMENTS FOR SUBMISSION Timetable. Authors must submit five (5) complete copies of their papers. Notice of acceptance or rejection will be sent to the first author. Appearance. Each copy of the paper should be clearly legible. Papers should be printed on 8-1/2 by 11" paper, double spaced with at least 1 inch margins with no smaller than 12 pt. type. Title Page. Each copy of the paper must have a title page (separate from the body of the paper) containing the title of the paper, the names and addresses of all the authors. The affiliation appearing under the author's name should be the name of the organization for which the work was carried out. When this is no longer the author's current affiliation, the latter is given in the address footnote on the first page. The title page must specify one topic from the scopes listed on the reverse side of this page. Abstract. The abstract should be 150 to 200 words and should be short and direct. It should be informative enough to serve as a substitute for reading the paper itself. Work planned but not done should not be described in the abstract. Do not display formulas and do not use citation reference numbers. Review Criteria. Each paper will be reviewed by experts in the area specified from the scope as the topic of the paper. Acceptance will be based on overall merit and significance of the reported research, as well as the quality of the presentation. Please send papers to: Jan Zubkoff Associate Editor, LASC Lucid, Inc. 707 Laurel Street Menlo Park, CA 94025 edsel!jlz@su-navajo (415) 329-8400 Suggestions and inquiries to: Dick Gabriel Guy L. Steele Jr. Editor-in-Chief Editor-in-Chief Lucid, Inc. Thinking Machines, Inc. 707 Laurel Street 245 First Street Menlo Park, CA 94025 Cambridge, MA 02142 rpg@sail gls@think.COM (415) 329-8400 (617) 876-1111  Received: from hplabs.HP.COM by MC.LCS.MIT.EDU 20 Oct 86 14:18:03 EDT Received: from hplmhw by hplabs.HP.COM ; Mon, 20 Oct 86 11:16:01 pdt Received: by hplmhw ; Mon, 20 Oct 86 10:55:43 pdt Date: Mon, 20 Oct 86 10:55:43 pdt From: Henry M. Wu Message-Id: <8610201755.AA00122@hplmhw> To: scheme@mit-mc Subject: [harris@hplwhh: Re: [ramsdell%faron@mitre-bedford.ARPA: Object-Oriented Schemes]] From: Warren Harris Date: Wed, 15 Oct 86 16:56:50 PDT Subject: Re: [ramsdell%faron@mitre-bedford.ARPA: Object-Oriented Schemes] To: mhwu@hplabs In-Reply-To: Your message of 15-Oct-86 13:34:39 X-Mailer: NMail [$Revision: 2.6 $] Henry: Please forward my interest in object-oriented extensions to scheme. I am familiar with scoops and have a paper describing the system's many shortcommings. Warren Harris -------  Received: from mitre-bedford.ARPA by MC.LCS.MIT.EDU 20 Oct 86 07:12:26 EDT Organization: The MITRE Corp., Bedford, MA Received: from faron.MENET by linus.MENET (1.1/4.7) id AA26459; Mon, 20 Oct 86 07:14:57 EDT Received: by faron.MENET (4.12/4.7) id AA07286; Mon, 20 Oct 86 07:06:48 edt Date: Mon, 20 Oct 86 07:06:48 edt From: John D. Ramsdell Posted-Date: Mon, 20 Oct 86 07:06:48 edt Message-Id: <8610201106.AA07286@faron.MENET> To: jeff%aiva.edinburgh.ac.uk@Cs.Ucl.AC.UK, scheme@mc.lcs.mit.edu Subject: Re: Public Domain The best way to find out the status of the T project is to write to one of the following address: t-project@yale.ARPA decvax!yale!t-poject.UUCP tproj@YALECS.BITNET John  Received: from Cs.Ucl.AC.UK by MC.LCS.MIT.EDU 16 Oct 86 16:05:42 EDT Received: from vax1.cs.ucl.ac.uk by mv1.Cs.Ucl.AC.UK via Ethernet with SMTP id aa03935; 16 Oct 86 19:28 WET Received: from 44d.cs.ucl.ac.uk by vax1.Cs.Ucl.AC.UK with SMTP id a006787; 16 Oct 86 19:43 BST Received: from aiva.edinburgh.ac.uk by 44d.Cs.Ucl.AC.UK via Janet with NIFTP id a006756; 16 Oct 86 19:43 BST From: Jeff Dalton Date: Thu, 16 Oct 86 19:43:23 -0100 Message-Id: <5570.8610161843@aiva.ed.ac.uk> To: scheme@mc.lcs.mit.edu Subject: Public Domain Date: Wed, 15 Oct 86 08:51:14 edt From: "John D. Ramsdell" To: scheme Subject: Object-Oriented Schemes I am wondering if people on this list would like to discuss Object-Oriented Schemes. Three implementations come to mind at this time. The oldest I know about is T[1]. TI has put its Object-Oriented system called SCOOPS in the public domain, as is T. Well, I would like to discuss such things, but what I'd like to know at the moment is this: is T now in the public domain? How might I obtain a copy of it or of SCOOPS. I'm sorry if this isn't the proper forum for such questions, but my options seem somewhat limited from here. -- Jeff P.S. I do have a t2.8, with licence. Am I now free to copy it to other machines?  Received: from mitre-bedford.ARPA by MC.LCS.MIT.EDU 15 Oct 86 08:57:28 EDT Organization: The MITRE Corp., Bedford, MA Received: by faron.MENET (4.12/4.7) id AA01933; Wed, 15 Oct 86 08:51:14 edt Date: Wed, 15 Oct 86 08:51:14 edt From: John D. Ramsdell Posted-Date: Wed, 15 Oct 86 08:51:14 edt Message-Id: <8610151251.AA01933@faron.MENET> To: scheme%mc.lcs.mit.edu@mitre-bedford.ARPA Subject: Object-Oriented Schemes Cc: ramsdell@mitre-bedford.ARPA I am wondering if people on this list would like to discuss Object-Oriented Schemes. Three implementations come to mind at this time. The oldest I know about is T[1]. TI has put its Object-Oriented system called SCOOPS in the public domain, as is T. I have had no experience with SCOOPS. Oaklisp[2] adds to the T idea of first class objects and operations, the idea of first class types. I'm not sure what this contributes. Are there any other implementations you would like to discuss? John [1] Rees, J. & N. Adams IV, "T: a dialect of Lisp or, Lambda: the ultimate software tool", 1982 Lisp and Functional Programming, August 1982. [2] Lang, K. & B. Pearlmutter, "Oaklisp: an Object-Oriented Scheme with First Class Types", OOPSLA '86, Sep-Oct 1986.  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 7 Oct 86 02:25:36 EDT Received: from umass-boston by csnet-relay.csnet id ab00520; 6 Oct 86 17:08 EDT Received: by umb.csnet (4.12/4.7) id AA11551; Mon, 6 Oct 86 17:01:38 edt Date: Mon, 6 Oct 86 17:01:38 edt From: Dan Stefanescu To: scheme%MC.LCS.MIT.EDU@RELAY.CS.NET Subject: SCHEME implementations Cc: dan@UMASS-BOSTON.CSNET Are there any for AT&T hardware, in particular for UNIX PC's and AT&T 3B2-400 machines ? Any pointers will be greatly appreciated. Dan  Received: from kim.Berkeley.EDU by MC.LCS.MIT.EDU 2 Oct 86 20:08:30 EDT Received: by kim.Berkeley.EDU (5.53/1.17) id AA01376; Thu, 2 Oct 86 17:08:00 PDT Message-Id: <8610030008.AA01376@kim.Berkeley.EDU> To: scheme@mc.lcs.mit.edu Subject: I am interested in gathering `significant' Scheme programs... Date: Thu, 02 Oct 86 17:07:57 PDT From: Benjamin Zorn My name is Ben Zorn, and I'm working on the SPUR Multiprocessor Lisp system at UC Berkeley. My particular interest is multiprocessor garbage collection. My current plans include taking `significant' Scheme programs and studying the object manipulation behavior that they have. By significant, I mean programs that are large enough to generate reasonable amounts of garbage, and are also considered to be important programs that are frequently used. Multiprocessor programs would be of even more interest to me. If you have publically available programs that would be of interest to me, I would greatly appreciate hearing from you. I will make a list of the replies available to this mailing list in a few weeks. -Ben Zorn (zorn@kim.berkeley.edu)  Received: from utah-cs.ARPA by MC.LCS.MIT.EDU 2 Oct 86 11:42:10 EDT Received: by utah-cs.ARPA (5.31/4.40.2) id AA24166; Thu, 2 Oct 86 09:41:35 MDT Received: by utah-orion.ARPA (5.31/4.40.2) id AA24813; Thu, 2 Oct 86 09:41:32 MDT Date: Thu, 2 Oct 86 09:41:32 MDT From: mohammad%utah-orion@utah-cs.arpa (Mohammad Pourheidari) Message-Id: <8610021541.AA24813@utah-orion.ARPA> To: scheme@mc.lcs.mit.edu Subject: Can anyone hear me? Hello, My name is Mohammad Pourheidari. I am a member of PASS group down at the University of Utah. I have made a couple of attempts to get a hold of Dr. Henry Lieberman; unfortunately both times unsuccessful. The net address I have been using is : henry@mit-mc. Can anyone tell me whether this is the best place to send him mail, or even better can anyone tell me what is the best way to get a hold of him. Thank you, Mohammad  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 2 OCT 86 11:35:37 EDT Date: Thu, 2 Oct 86 11:36:35 EDT From: Jonathan A Rees Subject: Lost mail To: GOERZ@SUMEX-AIM.ARPA cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Thu 2 Oct 86 07:56:36-PDT from Gunther Goerz Message-ID: <[AI.AI.MIT.EDU].101186.861002.JAR> Use FTP. Connect to MIT-MC, use an arbitrary user name and password, and get the file LSPMAI; SCHEME MAIL. (Note that the file name has spaces in it.) You can send questions like this to Scheme-Request@MC. Jonathan  Received: from SUMEX-AIM.ARPA by MC.LCS.MIT.EDU 2 Oct 86 10:58:19 EDT Date: Thu 2 Oct 86 07:56:36-PDT From: Gunther Goerz Subject: Lost mail To: scheme@MC.LCS.MIT.EDU cc: Goerz@SUMEX-AIM.ARPA Message-ID: <12243598741.13.GOERZ@SUMEX-AIM.ARPA> Unformtunately I made the big mistake to erase the SCHEME mail between Aug. 4 and Sep. 30 before having read it. As completely. As there were some very interesting items on the list, let me please ask you whether there is a simple way to remail the stuff to me. Sorry for the inconvenience, it was just my fault! ---Guenther -------  Received: from mitre-bedford.ARPA by MC.LCS.MIT.EDU 30 Sep 86 08:03:09 EDT Organization: The MITRE Corp., Bedford, MA Received: by linus.MENET (1.1/4.7) id AA02723; Tue, 30 Sep 86 08:04:40 EDT Date: Tue, 30 Sep 86 08:04:40 EDT From: John D. Ramsdell Posted-Date: Tue, 30 Sep 86 08:04:40 EDT Message-Id: <8609301204.AA02723@linus.MENET> To: scheme%mc.lcs.mit.edu@mitre-bedford.ARPA Subject: Refering to the Revised^3 Report on Scheme I've seen "The Revised Revised Report on Scheme or An UnCommon Lisp" referenced as "R3S". I would like to discourage this and suggest using "RRRS" or "R2RS". The "Revised^3 Report on the Algorithmic Language Scheme" will be in December SIGPLAN. The obvious reference is "R3RS" which is why I would like to discourge the use of "R3S" for the UnCommon Lisp report. John  Received: from Cs.Ucl.AC.UK by MC.LCS.MIT.EDU 28 Sep 86 11:14:15 EDT Received: from vax1.cs.ucl.ac.uk by mv1.Cs.Ucl.AC.UK via Ethernet with SMTP id ab02098; 28 Sep 86 16:06 WET Received: from 44d.cs.ucl.ac.uk by vax1.Cs.Ucl.AC.UK with SMTP id a001696; 28 Sep 86 16:12 BST Received: from aiva.edinburgh.ac.uk by 44d.Cs.Ucl.AC.UK via Janet with NIFTP id a009979; 28 Sep 86 16:07 BST From: Jeff Dalton Date: Sun, 28 Sep 86 16:04:02 -0100 Message-Id: <28548.8609281504@aiva.ed.ac.uk> To: scheme@mc.lcs.mit.edu Subject: Prolog in Scheme Unfortunately, the query system in Structure and Interpretation is not Prolog. In particular, it doesn't handle cut. While this may not metter much to some (especially those who think cut should be fluched anyway), it does make the system considerably less interesting as an implementation of Prolog.  Received: from OZ.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 25 SEP 86 14:48:06 EDT Date: 25 Sep 1986 13:27 EDT (Thu) Message-ID: From: Bill Rozas To: Tim Finin Cc: scheme@MC.LCS.MIT.EDU Subject: prolog in scheme In-reply-to: Msg of 25 Sep 1986 09:42-EDT from Tim Finin We tried using the query system in "Structure & Interpretation" in our freshman class last year and found it wanting in some respects. (1) It doesn't handle disjunctions unless the disjuncts contain the same variables. (2) It is extremely slow. We were using it in TI's PC Scheme on AT's. We gave some very simple logic programming problems (e.g. the standard kinship relations) and found that the students we spending 10 or 15 minutes waiting for the query system to finish! They found this very frustrating. (1) GJS consistently updates the query language and fixes versions as bugs appear. You should get in touch with him, the bug may have been fixed. (2) I have observed this also on MacScheme. I don't know about PC Scheme, but in the case of MacScheme the reason is probably that streams have no interpreter support, they are written in scheme. This is unlike MIT Scheme, for which the code was originally written. PC Scheme may have the same problem. While it is not blindingly fast on our machines at MIT, it only becomes slow with relatively complicated programs, and is adequately fast for the class. 10 or 15 mins. is way longer than I've ever seen it take while solving the S&ICP problems.  Received: from linc.cis.upenn.edu by MC.LCS.MIT.EDU 25 Sep 86 09:53:06 EDT Posted-Date: Thu, 25 Sep 86 09:42 EDT Message-Id: <8609251352.AA02609@linc.cis.upenn.edu> From: Tim Finin Subject: prolog in scheme To: scheme@mc.lcs.mit.edu Date: Thu, 25 Sep 86 09:42 EDT We tried using the query system in "Structure & Interpretation" in our freshman class last year and found it wanting in some respects. (1) It doesn't handle disjunctions unless the disjuncts contain the same variables. (2) It is extremely slow. We were using it in TI's PC Scheme on AT's. We gave some very simple logic programming problems (e.g. the standard kinship relations) and found that the students we spending 10 or 15 minutes waiting for the query system to finish! They found this very frustrating. I'd think I would like to cover the query system from S&I in class because it's clear and simple and have the students use a more suped-up version that is reasonably efficient. In addition, facilities like "retract", "reconsult", etc. would easy it's use in homeworks. I'd also like to consider using a system which uses a prolog-like depth-first backtracking search. Tim  Received: from lll-icdc.arpa by MC.LCS.MIT.EDU 24 Sep 86 12:31:11 EDT Date: 24 Sep 86 07:50:00 PDT From: "Searfus, Robert" Subject: please add me ... To: "scheme" Reply-To: "Searfus, Robert" to the scheme mailing list. searfus@lll-icdc.arpa ------  Received: from ALDERAAN.SCRC.Symbolics.COM by MC.LCS.MIT.EDU 24 Sep 86 10:34:13 EDT Received: from CHICOPEE.SCRC.Symbolics.COM by ALDERAAN.SCRC.Symbolics.COM via CHAOS with CHAOS-MAIL id 6731; Wed 24-Sep-86 10:32:24 EDT Date: Wed, 24 Sep 86 10:36 EDT From: Daniel L. Weinreb Subject: [MWILSON%CARLETON.BITNET@WISCVM.WISC.EDU: Prolog in Scheme?] To: Scheme@MIT-MC.ARPA In-Reply-To: <860915140445.8.SGR@GROUSE.SCRC.Symbolics.COM> Message-ID: <860924103627.1.DLW@CHICOPEE.SCRC.Symbolics.COM> Date: Mon, 15 Sep 86 14:04 EDT From: Stephen G. Rowley Answers, if any, to the Scheme mailing list at MIT: Date: 08 Sep 86 15:49:00 EDT From: Mike Wilson To: Subject: Prolog in Scheme? Hello, Are there any implementations of Prolog written in Scheme? I'm interested in any and all versions from minimal to full-featured. .Mike It would likewise be interesting to know if there are any versions of Scheme written in Prolog.  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 22 SEP 86 17:37:29 EDT Date: Mon, 22 Sep 86 17:39:42 EDT From: Jonathan A Rees Subject: Revised^3 Report on Scheme To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].97185.860922.JAR> Announcement: The "Revised^3 Report on the Algorithmic Language Scheme" has been completed. It is an updated version of the "Revised Revised Report on Scheme" which appeared in summer 1985. A draft of this report was circulated at the Lisp and Functional Programming Conference last month; the final version is practically the same as that draft. The "Revised^3 Report" will appear in SIGPLAN notices in December of this year. It will also be printed as MIT AI Memo 848a and as an Indiana University CSD technical report. I'll send a separate message as soon as I receive ordering information from MIT's publications office, so everyone who wants one can get one. - Jonathan Rees  Received: from seismo.CSS.GOV by MC.LCS.MIT.EDU 17 Sep 86 15:15:29 EDT Return-Path: Received: from prlb2.UUCP by seismo.CSS.GOV with UUCP; Wed, 17 Sep 86 11:27:06 EDT Received: by prlb2.UUCP (4.12/4.7) id AA04826; Wed, 17 Sep 86 17:24:59 -0100 Received: by prlb2.UUCP (4.12/4.7) id AA04820; Wed, 17 Sep 86 17:24:41 -0100 Message-Id: <8609171624.AA04820@prlb2.UUCP> To: scheme@mc.lcs.mit.edu Cc: prlb2!louis@seismo.CSS.GOV Subject: Request for information on new releases. Organisation: Philips Research Laboratory Brussels, Belgium Uucp-From: mvauclair@prlb2.UUCP Date: 17 Sep 86 17:24:35 N (Wed) From: Marc Vauclair First, sorry for sending this request to scheme@mit-mc instead of scheme-team@mit-mc but when trying the last address I got the message reproduced at the end of this one. For more than a year by now, we are using the MIT Scheme implementation (Microcode version 6.1, Runtime version 11.2) on our Vax with Unix 4.2. In few words, we greatly appreciate both the language and its implementation. There are only two dark spots : - the lack of documentation of the implementation (the only documentation I have at my disposition are the "Structure and Interpretation..." book and the revised revised report - the slowness of the terminal i/o and in some circumstances of the interpreter itself. Is a newer version for VAX Unix available ? Does it include a compiler ? Is a version for SUN 3 available ? How can we get these new versions ? Is it possible to get some documentation on the implementation ? Regards, Marc. [*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*][*] From: Communications Satellite Subject: Msg of Wednesday, 17 September 1986 06:35-EDT To: "prlb2!vauclair@seismo.CSS.GOV" Message-Id: <[MC.LCS.MIT.EDU].88830.860917> ============ A copy of your message is being returned, because: ============ "SCHEME-TEAM" at MC.LCS.MIT.EDU is an unknown recipient. ============ Failed message follows: ============ Received: from seismo.CSS.GOV by MC.LCS.MIT.EDU 17 Sep 86 06:35:14 EDT Return-Path: Received: from prlb2.UUCP by seismo.CSS.GOV with UUCP; Wed, 17 Sep 86 06:15:00 EDT Received: by prlb2.UUCP (4.12/4.7) id AA26873; Wed, 17 Sep 86 11:28:57 -0100 Received: by prlb2.UUCP (4.12/4.7) id AA26863; Wed, 17 Sep 86 11:28:23 -0100 Message-Id: <8609171028.AA26863@prlb2.UUCP> To: scheme-team@mit-mc.arpa Cc: prlb2!louis@seismo.CSS.GOV Subject: Request for information on new releases. Organisation: Philips Research Laboratory Brussels, Belgium Uucp-From: mvauclair@prlb2.UUCP Date: 17 Sep 86 11:27:54 N (Wed) From: Marc Vauclair  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 15 Sep 86 22:06:12 EDT Received: from ti-csl by csnet-relay.csnet id ag02059; 15 Sep 86 13:20 EDT Received: by tilde id AA13084; Mon, 15 Sep 86 10:11:25 cdt Date: Mon, 15 Sep 86 10:11:25 cdt From: Amitabh Srivastava To: scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA Subject: Advising methods in TI Scheme Cc: shneider%cui.unige.chunet%ubc.csnet@CSNET-RELAY.ARPA >> 1) I started writing a program with lots of methods. Now it start loosing >> "track". >> -> How can I trace methods in Ti scheme? >> i.e. is there an elegant way of doing it ? The procedure %sc-method-env returns the environment containing the methods of a class. By using this and advise-entry and advise-exit different tracing macros can be written. For example, we can write a special form trace-method-entry to trace the entry of method m1 of class class1. (trace-method-entry m1 class1) => (macro trace-method-entry (lambda (e) (let ((method (cadr e)) (class (caddr e))) `(ADVISE-ENTRY (ACCESS ,method (%sc-method-env ,class)) (lambda (p a e) (writeln " The method " ',method " of class " ',class " is called with " a)))))) Similarly one can write a macro to trace exits. - amitabh  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 15 SEP 86 07:37:08 EDT Date: Sun, 14 Sep 86 12:34:06 EDT From: Jonathan A Rees Subject: Prolog in Scheme? To: fowler@ROCHESTER.ARPA cc: MWILSON%CARLETON.BITNET@WISCVM.WISC.EDU, scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Sat 13 Sep 86 23:11:43 edt from Rob Fowler Message-ID: <[AI.AI.MIT.EDU].93903.860914.JAR> Date: Sat, 13 Sep 86 23:11:43 edt From: Rob Fowler If you get any responses I'd appreciate it if you could pass them along to me. I'm currently teaching an "AI Programming" course entirely in Scheme using MacScheme and I'd really like to get hld of a Prolog or even a subset that I could turn the students loose on for a couple of weeks. Why not just use the query system in Structure & Interpretation? - Jonathan  Received: from ur-cayuga.arpa by MC.LCS.MIT.EDU 13 Sep 86 23:35:30 EDT Received: from ur-seneca.arpa (ur-seneca) by ur-cayuga.arpa id AA08101 (4.12x); Sat, 13 Sep 86 23:09:58 edt Received: by ur-seneca.arpa id AA05145 (4.12x); Sat, 13 Sep 86 23:11:43 edt Message-Id: <8609140311.5145@ur-seneca.arpa> Date: Sat, 13 Sep 86 23:11:43 edt From: Rob Fowler To: scheme@MC.LCS.MIT.EDU, MWILSON%CARLETON.BITNET@WISCVM.WISC.EDU Cc: Rob Fowler Subject: Re: Prolog in Scheme? If you get any responses I'd appreciate it if you could pass them along to me. I'm currently teaching an "AI Programming" course entirely in Scheme using MacScheme and I'd really like to get hld of a Prolog or even a subset that I could turn the students loose on for a couple of weeks. -- Rob Fowler (fowler@rochester.edu)  Received: from WISCVM.WISC.EDU by MC.LCS.MIT.EDU 13 Sep 86 22:41:47 EDT Received: from (MWILSON)CARLETON.BITNET by WISCVM.WISC.EDU on 09/11/86 at 09:16:21 CDT Received: from MWILSON by CARLETON.BITNET on 09 Sep 86 16:08:31 EDT Date: 08 Sep 86 15:49:00 EDT From: Mike Wilson To: Subject: Prolog in Scheme? Hello, Are there any implementations of Prolog written in Scheme? I'm interested in any and all versions from minimal to full-featured. .Mike  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 8 Sep 86 23:03:17 EDT Received: from ti-csl by csnet-relay.csnet id aa02126; 8 Sep 86 18:03 EDT Received: by tilde id AA26422; Mon, 8 Sep 86 15:25:20 cdt Date: Mon, 8 Sep 86 15:25:20 cdt From: Amitabh Srivastava To: schneider%cui.unige.chunet%ubc@CSNET-RELAY.ARPA Subject: Advising methods in TI Scheme Cc: scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA >> 1) I started writing a program with lots of methods. Now it start loosing >> "track". >> -> How can I trace methods in Ti scheme? >> i.e. is there an elegant way of doing it ? The procedure %sc-method-env returns the environment containing the methods of a class. By using this and advise-entry and advise-exit different tracing macros can be written. For example, we can write a special form trace-method-entry to trace the entry of method m1 of class class1. (trace-method-entry m1 class1) => (macro trace-method-entry (lambda (e) (let ((method (cadr e)) (class (caddr e))) `(ADVISE-ENTRY (ACCESS ,method (%sc-method-env ,class)) (lambda (p a e) (writeln " The method " ',method " of class " ',class " is called with " a)))))) Similarly one can write a macro to trace exits. - amitabh  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 8 Sep 86 16:25:41 EDT Received: from ubc by csnet-relay.csnet id aa00411; 8 Sep 86 15:19 EDT Date: Mon, 8 Sep 86 11:24:54 pdt Received: by ubc.csnet id AA13463; Mon, 8 Sep 86 11:24:54 pdt From: "Daniel K. Schneider" Sender: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at CSNET-RELAY.ARPA Message-Id: <122:shneider@cui.unige.chunet> Subject: Beginners question: Advising methods in TI scheme 1) I started writing a program with lots of methods. Now it start loosing "track". -> How can I trace methods in Ti scheme? i.e. is there an elegant way of doing it ? 2) Is there any person to whom I should send this kind of request ? Thanks for any help (and reply by e-mail) ------------------------------------------------------------------------------- Daniel K.Schneider Departement de science politique, Universite de Geneve 1211 GENEVE 4 (Switzerland), Tel. (..41) 22 20 93 33 ext. 2357 to VMS/BITNET: to UNIX/EAN (preferable): BITNET: SCHNEIDER@CGEUGE51 shneider%cui.unige.chunet@CERNVAX ARPA: SCHNEIDER%CGEUGE51.BITNET@WISCVM shneider%cui.unige.chunet@ubc.csnet uucp: mcvax!cernvax!cui!shneider X.400/ean: shneider@cui.unige.chunet  Received: from utah-cs.ARPA by MC.LCS.MIT.EDU 8 Sep 86 11:34:07 EDT Received: by utah-cs.ARPA (5.31/4.40.2) id AA22771; Mon, 8 Sep 86 09:32:07 MDT Received: by utah-orion.ARPA (5.31/4.40.2) id AA03156; Mon, 8 Sep 86 09:32:04 MDT Date: Mon, 8 Sep 86 09:32:04 MDT From: carr%utah-orion@utah-cs.arpa (Harold Carr) Message-Id: <8609081532.AA03156@utah-orion.ARPA> To: scheme@mc.lcs.mit.edu Subject: scoops Could someone tell me how to obtain SCOOPS? Thanks, Harold  Received: from yale-bulldog by MC.LCS.MIT.EDU 8 Sep 86 11:21:04 EDT Received: by Yale-Bulldog.YALE.ARPA; 8 Sep 86 11:01:05 EDT (Mon) Date: 8 Sep 86 11:01:05 EDT (Mon) From: James F Philbin Message-Id: <8609081501.AA17146@Yale-Bulldog.YALE.ARPA> Subject: Re: [THOMAS: Scheme Books?] To: What books are available for Scheme ? Are there solution manuals available for any of these? Steven Slade had written and introductory programming book which might be of interest. Contact SLADE@YALE for details. - Jim The T Programming Language: A Dialect of LISP Stephen Slade Prentice-Hall, Englewood Cliffs, N.J. To appear: November, 1986  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 8 Sep 86 06:27:39 EDT Received: from ubc by csnet-relay.csnet id aa08170; 8 Sep 86 6:19 EDT Date: Mon, 8 Sep 86 02:28:14 pdt Received: by ubc.csnet id AA11319; Mon, 8 Sep 86 02:28:14 pdt From: "Daniel K. Schneider" To: scheme@MC.LCS.MIT.EDU MMDF-Warning: Parse error in original version of preceding line at CSNET-RELAY.ARPA Message-Id: <121:shneider@cui.unige.chunet> Subject: Beginners question: Advising methods in TI scheme 1) I started writing a program with lots of methods. Now it start loosing "track". -> How can I trace methods in Ti scheme? i.e. is there an elegant way of doing it ? 2) Is there any person to whom I should send this kind of request ? Thanks for any help (and reply by e-mail) ------------------------------------------------------------------------------- Daniel K.Schneider Departement de science politique, Universite de Geneve 1211 GENEVE 4 (Switzerland), Tel. (..41) 22 20 93 33 ext. 2357 to VMS/BITNET: to UNIX/EAN (preferable): BITNET: SCHNEIDER@CGEUGE51 shneider%cui.unige.chunet@CERNVAX ARPA: SCHNEIDER%CGEUGE51.BITNET@WISCVM shneider%cui.unige.chunet@ubc.csnet uucp: mcvax!cernvax!cui!shneider X.400/ean: shneider@cui.unige.chunet  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 5 Sep 86 22:44:06 EDT Received: from bu-cs.bu.edu by CSNET-RELAY.ARPA id aa00483; 5 Sep 86 16:15 EDT Return-Path: Received: by bu-cs.bu.edu (5.31/4.7) id AA04666; Fri, 5 Sep 86 11:11:29 EDT Date: Fri, 5 Sep 86 11:11:29 EDT From: Marek Holynski Message-Id: <8609051511.AA04666@bu-cs.bu.edu> To: scheme@MC.LCS.MIT.EDU Subject: list Could you please delete me from the distribution list. Thank you.  Received: from decwrl.dec.com by MC.LCS.MIT.EDU 4 Sep 86 20:41:23 EDT Received: by decwrl.dec.com (5.54.2/4.7.34) id AA00703; Thu, 4 Sep 86 17:39:12 PDT Message-Id: <8609050039.AA00703@decwrl.dec.com> Date: 04-Sep-1986 1022 From: wecker%cookie.DEC@decwrl.DEC.COM (DAVE TANSTAAFL WECKER) To: scheme@MC.LCS.MIT.EDU Subject: Please delete me from this distribution list, thanks - dave  Received: from WISCVM.WISC.EDU by MC.LCS.MIT.EDU 4 Sep 86 11:54:48 EDT Received: from (F95THOMP)CARLETON.BITNET by WISCVM.WISC.EDU on 09/04/86 at 10:52:41 CDT Received: from F95THOMP by CARLETON.BITNET on 03 Sep 86 17:37:10 EDT Date: 03 Sep 86 17:11:00 EDT From: DAVE THOMAS To: Subject: Scheme Books? What books are available for Scheme(other than S&ICP)? Are there solution manuals available for any of these? Thanks  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 18 Aug 86 19:44:47 EDT Received: from tektronix by csnet-relay.csnet id ac01742; 18 Aug 86 18:44 EDT Received: by tektronix.TEK (5.31/6.16) id AA07543; Mon, 18 Aug 86 10:42:41 PDT Received: by tekchips.TEK (5.31/6.16) id AA03638; Mon, 18 Aug 86 10:45:31 PDT Message-Id: <8608181745.AA03638@tekchips.TEK> To: scheme@MC.LCS.MIT.EDU Cc: willc%tekchips.tek.com@CSNET-RELAY.ARPA Subject: define syntax (an apology) In-Reply-To: Your message of Fri, 15 Aug 86 13:47:03 EDT. <[AI.AI.MIT.EDU].84074.860815.JAR> Date: 18 Aug 86 10:45:30 PDT (Mon) From: willc%tekchips.tek.csnet@CSNET-RELAY.ARPA A message I sent several months ago recently made it to this mailing list. By now, my message is incorrect. I wish to apologize for the confusion I have caused. There is an important difference between the 1985 Scheme standard (MIT AI Memo 848) and the draft of the new 1986 Scheme standard (distributed at the ACM Conference on Lisp and Functional Programming and expected to appear in November SIGPLAN Notices). In the 1985 standard (define (foo ...) ...) was equivalent to (define foo (rec foo (lambda (...) ...))). In the 1986 standard (define (foo ...) ...) is equivalent to (define foo (lambda (...) ...)). As I understand it, the motivation for this change is that in the 1985 semantics, mutual recursion goes through the obvious binding of foo, but self-recursion goes through the invisible (and therefore mysterious) binding of foo created by the implicit rec. It's hard to explain why self-recursion should behave differently from mutual recursion, so the 1986 semantics gets rid of the implicit rec and the mystery. This change was inadvertently omitted from the list of changes that appears in the draft distributed at the Lisp conference, so you have to read the draft very carefully to spot it. By the way, the (define ((foo ...) ...) ...) syntax was also dropped from the draft as a simplifying measure. Peace, Will  Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 18 AUG 86 03:41:46 EDT Received: from yale-bulldog by MC.LCS.MIT.EDU 23 Apr 86 21:58:42 EST Received: by Yale-Bulldog.YALE.ARPA; 23 Apr 86 21:46:26 EST (Wed) Date: 23 Apr 86 21:46:26 EST (Wed) From: Ashwin Ram Message-Id: <8604240246.AA12180@Yale-Bulldog.YALE.ARPA> Subject: Re: The generality of define To: andy@aids-unix.ARPA (Andy Cromarty) Cc: SCHEME@MC.LCS.MIT.EDU In-Reply-To: andy@aids-unix.ARPA (Andy Cromarty), Wed, 23 Apr 86 19:09:53 EST Date: 21 Apr 1986 09:43-PST From: andy@aids-unix (Andy Cromarty) Subject: Re: The generality of define Actually, a properly implemented (define (square x) (* x x)) is not equivalent to (define square (lambda (x) (* x x))) at all, but rather to (define square (rec square (lambda (x) (* x x)))) (define (fact1 n) (if ( (pp copy1) (LAMBDA (N) (IF ( (pp copy2) | environment. (LAMBDA (N) (IF ( (copy1 5) 20 > (copy2 5) 20 This makes sense to me since (DEFINE (FOO ...) ...) is specified to be equivalent to (DEFINE FOO (LAMBDA (...) ...)). In both cases, FOO is defined to be a closure whose environment is the environment of definition, i.e., the REPL-ENV. To get the definition analogous to your REC case, you need to use LABELS explicitly: > (define fact3 (labels (((fact3 n) (if (< n 2) 1 (* n (fact3 (-1+ n)))))) fact3)) > (define copy3 fact3) > (define fact3 (lambda (x) x)) > (copy3 5) 120 It might make more sense to make this the default expansion since you would usually expect the recursive call to refer to the definition-time procedure (as opposed to its "name"), though now the variables FACT3 and N have different reference semantics within the same form. In the case of two or more mutually recursive functions, you still have to rely on the run-time values of the cells that the variables in the closure refer to in the environment that the closure was defined in. It's debatable, therefore, whether special reference semantics for the name of the lambda form is the "proper implementation", though it does seem more natural albeit hairier. -- Ashwin. -------  Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 13 AUG 86 05:32:10 EDT Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 17 Apr 86 00:50:16 EST Received: from tektronix by csnet-relay.csnet id ak29970; 17 Apr 86 0:43 EST Received: by tektronix (5.31/5.14) id AA20915; Wed, 16 Apr 86 13:06:21 PST Received: by tekchips (5.31/5.14) id AA02612; Wed, 16 Apr 86 13:06:41 PST Date: Wed, 16 Apr 86 13:06:41 PST From: Will Clinger Message-Id: <8604162106.AA02612@tekchips> To: SCHEME%MIT-MC%tektronix.csnet@CSNET-RELAY.ARPA Subject: Re: define Cc: Roger Kirchner writes: >Kent M Pitman said that there are other possible interpretations of >(DEFINE (((...) ...) ...) ...) >besides as an extended template for procedure definition. >What would be the objections to making this interpretation standard? Your interpretation is already standard, though not essential; see page 18 of MIT AI Memo 848. Though other interpretations are possible, they would be in conflict with the Revised Revised Report. The extended syntax began in MIT Scheme and was picked up by MacScheme and PC Scheme. T2 doesn't support it. I don't know about Chez Scheme et cetera. Peace, Will  Received: from MIT-MULTICS.ARPA by MC.LCS.MIT.EDU 11 Aug 86 11:50:28 EDT Received: from UNBMVS1(MAILER) by MITVMA (Mailer X1.23) id 8365; Mon, 11 Aug 86 11:48:58 EDT Date: 11 Aug 86 10:34:28 ADT From: To: scheme@mc.lcs.mit.edu Subject: Instructor's manual for S&ICP by Julie Sussman Message-ID: - Can anyone tell me whether the "Instructors Manual" for Structure and Interpretation of Computer Programs by Abelson and Sussman, written by Julie Sussman is available? If so, how can it be obtained? McGraw-Hill Canada doesn't seem to have heard of it. Any help with this would be greatly appreciated. Steve R. SRAUCH@UNBMVS1.BITNET  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 8 AUG 86 11:18:43 EDT Date: Fri, 8 Aug 86 11:16:47 EDT From: Jonathan A Rees To: wolfgang%cantuar%waterloo.csnet@CSNET-RELAY.ARPA cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Wed 6 Aug 86 19:30:29 nzt from Facilities Committee Message-ID: <[AI.AI.MIT.EDU].80950.860808.JAR> Date: Wed, 6 Aug 86 19:30:29 nzt From: Facilities Committee To: scheme < at CSNET-RELAY.ARPA, at watmath.waterloo.edu:scheme@MC.LCS.MIT.EDU> Date: Thu, 31 Jul 86 10:44:24+1200 From: wolfgang@cantuar.Waterloo.edu (W. Kreutzer) To: SCHEME@MIT-MC.csnet@watmath.Waterloo.edu Subject: Chez Scheme We would be interested in more info on Chez Scheme. Who can we contact ? Since we are using an experimental connection from New Zealand, please reply through either: wolfgang%cantuar@waterloo.csnet OR ...watmath!cantuar!wolfgang. Thanks. w.kreutzer Univ. of Canterbury, NZ Implementation: Chez Scheme Authored by: Kent Dybvig Supported by: limited support by the author Hardware: VAX Operating Systems: 4.2 BSD UNIX (or ULTRIX) Implementation: incrementally compiled to native code Intended Use: education and research Price: Per site: $400 for US colleges and universities, and $1000 for companies who will use the system for research and education only. Chez Scheme was first released earlier this year and is now being used at about 10 universities for classes and research. Chez Scheme supports almost all of the required and optional features of the RRRS. The next major release (in spring or summer 1986) will support 100% of the required features of the standard. In addition to the features of the RRRS, Chez Scheme provides error and exception handling, engines, programmable cafes and waiters (fancy read-eval-print loops), tracing and statistics- gathering facilities, and fast-loading compiled files. Chez Scheme provides floating point numbers, arbitrary-precision ratios, and arbitrary-precision integers, but no imaginary numbers at this time. Chez Scheme's biggest claim to fame is the speed and size of its implementation. It outperforms Franz Lisp and DEC Common Lisp on most programs, but the initial core image is less than 500K bytes, about half of which is read-only and sharable. For the license forms and ordering information, contact: Kent Dybvig Cadence Research Systems 620 Park Ridge Road Bloomington, IN 47401 812/333-9269 You can also reach me during the day at 812/335-8653, or by electronic mail to dyb.indiana@csnet-relay.  Received: from ORNL-MSR.ARPA by MC.LCS.MIT.EDU 7 Aug 86 10:29:37 EDT Received: by ORNL-MSR.ARPA (4.12/4.9) id AA05596; Thu, 7 Aug 86 10:24:46 edt Date: Thu, 7 Aug 86 10:24:46 edt From: jcm@ORNL-MSR.ARPA (James A. Mullens) Message-Id: <8608071424.AA05596@ORNL-MSR.ARPA> To: scheme@mit-mc Subject: Re: Scheme for the Atari ST from Bill Pase (Pase@DOCKMASTER.ARPA) >Does anyone know if Scheme is available for the Atari ST? I recently asked similar questions here, which lead me to some history which may be helpful. I'll summarize what I've learned from people on this list and the archives. The archives for this group contain some references to "Scheme 312". This is the ancestor of MacScheme. MacScheme is actually being developed on the Stride (Sage) computer under the CP/M-68K operating system, so the author has an decent version working in that environment. (The author is not interested in distributing or supporting that version, however). I have heard that the Atari ST runs GEM on top of CP/M-68K (or a minor mutation of CP/M). If this is true, it might be easy to port to the Atari -- maybe easier than porting to the Mac. Perhaps the author is not aware of this possibility and would be interested in doing the port? The author's name is Will Clinger, and he used to be at willc%indiana.csnet@csnet-relay.arpa which is Indiana U on CSnet from my ARPAnet BSD Unix machine. I'm not sure if he monitors this list... The MacScheme distributor address: Semantic Microsystems 4470 SW Hall Street, Suite 340 Beaverton OR 97005 (503) 643-4539 Dave Alcocer (alco@mit-vax) was working with CScheme. He says this public domain version is portable. Dave said he was interested having it on his Amiga, but it might need to be trimmed down from approximately 2 megabytes by removing some trimmings. Wouldn't it be amazing to see a group of Mac, Amiga, and ST owners cooperating on a public domain Scheme! The GNU project has started distributing CScheme. I'm not sure why they have decided to do so. Good Luck - - jim mullens / oak ridge national lab  Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 7 AUG 86 06:00:12 EDT Received: from DOCKMASTER.ARPA by MC.LCS.MIT.EDU 4 Apr 86 16:23:17 EST Date: Fri, 4 Apr 86 00:59 EST From: Bill Pase Subject: Scheme for the Atari ST To: scheme@MIT-MC.ARPA Message-ID: <860404055925.041933@DOCKMASTER.ARPA> Does anyone know if Scheme is available for the Atari ST? I know there are versions for the IBMPC and the Macintosh. It wouIt would seem especially with the later that an Atari version should be easy. Does anyone have any plans to develop it? /bill  Received: from MX.LCS.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 7 AUG 86 04:34:17 EDT Date: Thu, 7 Aug 86 04:30:58 EDT From: Jonathan A Rees Subject: non-list arguments To: rhh@MC.LCS.MIT.EDU cc: scheme@MC.LCS.MIT.EDU, t-discussion@MC.LCS.MIT.EDU In-reply-to: Msg of Tue 1 Apr 86 15:26 EST from Robert Halstead Message-ID: <[MX.LCS.MIT.EDU].939050.860807.JAR> Date: Tue, 1 Apr 86 15:26 EST From: Robert Halstead To summarize, I think it should be permissible for (eq? ((lambda x x) l) l) to return true, but it should not be a requirement. Furthermore, it should be permissible for an implementation to report an error if l in the above expression is not a true list, but an implementation should not be required to do so. Of course, it would still be true that ((lambda x x) 3 4 5) would return a freshly consed list, just like (list 3 4 5). An interesting question: do people expect (apply list l) to return a top-level copy of l? -b. Permitting sharing between the argument passed to apply and the rest-argument leads to all kinds of obscure bugs - especially if sharing isn't guaranteed. In fact I have written and used interpreters which shared the list, and I regretted it every time. Efficiency shouldn't guide the design on this issue. A compiler could easily detect the situation you described (a rest-variable referenced only as the last argument to APPLY) and generate code which doesn't cons. Jonathan  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 6 Aug 86 04:49:37 EDT Received: from waterloo by csnet-relay.csnet id aa13776; 6 Aug 86 4:32 EDT Received: from cantuar.uucp by watmath; Wed, 6 Aug 86 03:54:00 edt Date: Wed, 6 Aug 86 19:30:29 nzt From: Facilities Committee To: scheme <@CSNET-RELAY.ARPA,@watmath.waterloo.edu:scheme@MC.LCS.MIT.EDU> Date: Thu, 31 Jul 86 10:44:24+1200 From: wolfgang@cantuar.Waterloo.edu (W. Kreutzer) To: SCHEME@MIT-MC.csnet@watmath.Waterloo.edu Subject: Chez Scheme We would be interested in more info on Chez Scheme. Who can we contact ? Since we are using an experimental connection from New Zealand, please reply through either: wolfgang%cantuar@waterloo.csnet OR ...watmath!cantuar!wolfgang. Thanks. w.kreutzer Univ. of Canterbury, NZ  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 4 Aug 86 03:41:37 EDT Received: from waterloo by csnet-relay.csnet id ac03100; 4 Aug 86 3:32 EDT Received: from cantuar.uucp by watmath; Mon, 4 Aug 86 03:02:42 edt Date: Mon, 4 Aug 86 18:50:44+1200 From: Facilities Committee To: SCHEME <@CSNET-RELAY.ARPA,@watmath.waterloo.edu:SCHEME@MC.LCS.MIT.EDU> Date: Thu, 31 Jul 86 10:44:24+1200 From: wolfgang@cantuar.Waterloo.edu (W. Kreutzer) To: SCHEME@MIT-MC.csnet@watmath.Waterloo.edu Subject: Chez Scheme We would be interested in more info on Chez Scheme. Who can we contact ? Since we are using an experimental connection from New Zealand, please reply through either: wolfgang%cantuar@waterloo.csnet OR ...watmath!cantuar!wolfgang. Thanks. w.kreutzer Univ. of Canterbury, NZ  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 4 Aug 86 03:41:30 EDT Received: from waterloo by csnet-relay.csnet id ab03100; 4 Aug 86 3:31 EDT Received: from cantuar.uucp by watmath; Mon, 4 Aug 86 03:02:07 edt Date: Mon, 4 Aug 86 18:50:44+1200 From: Facilities Committee To: SCHEME <@CSNET-RELAY.ARPA,@watmath.waterloo.edu:SCHEME@MC.LCS.MIT.EDU> Date: Thu, 31 Jul 86 10:44:24+1200 From: wolfgang@cantuar.Waterloo.edu (W. Kreutzer) To: SCHEME@MIT-MC.csnet@watmath.Waterloo.edu Subject: Chez Scheme We would be interested in more info on Chez Scheme. Who can we contact ? Since we are using an experimental connection from New Zealand, please reply through either: wolfgang%cantuar@waterloo.csnet OR ...watmath!cantuar!wolfgang. Thanks. w.kreutzer Univ. of Canterbury, NZ  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 31 Jul 86 14:04:02 EDT Received: from dali.berkeley.edu by CSNET-RELAY.ARPA id aa27481; 31 Jul 86 12:45 EDT Received: by dali.Berkeley.EDU (5.53/1.14) id AA17087; Thu, 31 Jul 86 08:49:56 PDT Date: Thu, 31 Jul 86 08:49:56 PDT From: Richard Fateman Message-Id: <8607311549.AA17087@dali.Berkeley.EDU> To: Mike_Wilson%CARLETON.BITNET@WISCVM.WISC.EDU, scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA Subject: Re: Performance and Evaluation of Scheme Systems... since the programs used for timing were allowed to be different from the ones in RPG's book, (e.g. declarations) and at least some of the programs are unrunnnable as given, the benchmark timings are somewhat less useful than you might think. If YOU run them benchmarks on various machines/lisps, you may get much different numbers.  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 22 Jul 86 15:46:50 EDT Received: from yale-bulldog.arpa by CSNET-RELAY.ARPA id aa08705; 22 Jul 86 15:45 EDT Received: by Yale-Bulldog.YALE.ARPA; 22 Jul 86 15:13:41 EDT (Tue) Date: 22 Jul 86 15:13:41 EDT (Tue) From: Paul Hudak Message-Id: <8607221913.AA06470@Yale-Bulldog.YALE.ARPA> Subject: Re: Performance and Evaluation of Scheme Systems... To: Mike Wilson Cc: scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA In-Reply-To: Mike Wilson , 21 Jul 86 08:04:00 EDT I've just been looking through the book _Performance and Evaluation of Lisp Systems_ (Richard P. Gabriel, The MIT Press). It's got benchmark results for several simple programs run on the more common lisp systems. Has anyone run these tests in CScheme/MacScheme/TIScheme? It would be interesting to see how we stack up. (I have to admit I am *impressed* with their times for the IBM 3081 and CRAY-XMP. Oh well...) The following is an excerpt from the paper: Kranz, D., Kelsey, R., Rees, J., Hudak, P., Philbin, J., and Adams, N. "ORBIT: an optimizing compiler for Scheme" in Proceedings of ACM SIGPLAN '86 Symposium on Compiler Construction, June 1986, pp. 219-233. Also to be published as SIGPLAN Notices Vol. 21, No. 7, July 1986. Orbit vs. Other Lisp Engines: Orbit 3600 Dorado 8600 780 Program (SUN III) +IFU (Dec CL) (Dec CL) ------------------------------------------------------- Tak 0.25 0.43 0.52 0.45 1.83 Takl 1.63 4.95 3.62 2.03 7.34 Boyer 15.84 9.40 17.08 12.18 46.79 Browse 40.28 21.43 52.50 38.69 118.51 Destructive 1.24 2.18 3.77 2.10 6.38 Deriv 3.62 3.79 15.70 4.27 13.76 Dderiv 4.92 3.89 17.70 6.58 19.00 IDiv2 0.24 1.51 3.43 1.65 5.00 RDiv2 0.36 2.50 4.08 2.52 9.84 Triangle 84.36 116.99 252.20 99.73 360.85 Fprint 2.18 2.60 2.93 1.08 3.94 Fread 2.62 4.60 1.57 2.34 7.24 Tprint 1.66 4.89 5.55 0.70 2.85 Orbit vs. PSL vs. Franz: Orbit PSL Franz Program DN300 DN300 Sun II ------------------------------------- Tak 1.34 1.62 2.37 Takl 6.21 12.90 12.82 Boyer 63.16 46.92 37.94 Destructive 7.91 10.16 9.57 Dderiv 28.12 28.95 16.95 Orbit vs. Algol-like Languages: DEC DEC Program Orbit Unix C DEC C Pascal Modula II --------------------------------------------------- Perm 1.26 2.6 2.5 2.5 2.0 Tower 1.65 2.6 2.7 2.6 1.9 ORBIT was built (primarily) at Yale, and its availability will be announced at the upcoming LISP Conference. If you want more details about ORBIT or the benchmarks, please read the above cited paper. -Paul  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 21 JUL 86 16:53:21 EDT Date: Mon, 21 Jul 86 16:37:10 EDT From: Yekta Gursel Subject: Bobcat scheme To: bc@MEDIA-LAB.MIT.EDU cc: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Mon 21 Jul 86 14:38:21 EDT from William H Coderre Message-ID: <[AI.AI.MIT.EDU].73422.860721.YEKTA> Just say "scheme -heap nnn" where "nnn" is the number of kilo-items... I think the default is 150 and I have run programs with heaps as high as 1200. (You should have enough swap space for that if you are planning run at that heap value). Best, Yekta  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 21 JUL 86 15:08:31 EDT Date: Mon, 21 Jul 86 15:06:42 EDT From: Jonathan A Rees Subject: Logic Continuations (Abstract) To: Clowney@BLUE.RUTGERS.EDU cc: cth%indiana.csnet@CSNET-RELAY.ARPA, scheme@MC.LCS.MIT.EDU In-reply-to: Msg of 21 Jul 86 11:11 EDT (Mon) from Les Message-ID: <[AI.AI.MIT.EDU].73379.860721.JAR> Date: 21 Jul 86 11:11 EDT (Mon) From: Les ... Where should I inquire about this report and a general index of Scheme related reports? I'm trying to maintain a moderately thorough bibliography. Here's what it looks like at present (this is the bibliography for the new version of the scheme report). If anyone has additions to suggest, please send me mail. - Jonathan \begin{thebibliography}{99} \bibitem{SICP} Harold Abelson and Gerald Jay Sussman with Julie Sussman. {\em Structure and Interpretation of Computer Programs.} MIT Press, Cambridge, 1985. \bibitem{Bartley86} David H.~Bartley and John C.~Jensen. The implementation of PC Scheme. To appear in {\em Proceedings of the 1986 ACM Conference on Lisp and Functional Programming}. \bibitem{Scheme81} John Batali, Edmund Goodhue, Chris Hanson, Howie Shrobe, Richard M.~Stallman, and Gerald Jay Sussman. The Scheme-81 architecture---system and chip. In {\em Proceedings, Conference on Advanced Research in VLSI}, pages 69--77. Paul Penfield, Jr., editor. Artech House, 610 Washington Street, Dedham MA, 1982. \bibitem{RRRS} William Clinger, editor. The revised revised report on Scheme, or an uncommon Lisp. MIT Artificial Intelligence Memo 848, August 1985. Also published as Computer Science Department Technical Report 174, Indiana University, June 1985. \bibitem{Clinger84} William Clinger. The Scheme 311 compiler: An exercise in denotational semantics. In {\em Conference Record of the 1984 ACM Symposium on Lisp and Functional Programming}, pages 356--364. \bibitem{Dybvig86} R.~Kent Dybvig, Daniel P.~Friedman, and Christopher T.~Haynes. Expansion-passing style: Beyond conventional macros. To appear in {\em Proceedings of the 1986 ACM Conference on Lisp and Functional Programming.} \bibitem{Eisenberg85} Michael A.~Eisenberg. Bochser: an integrated Scheme programming system. MIT Laboratory for Computer Science Technical Report 349, October 1985. \bibitem{Feeley86} Marc Feeley. Deux approches \`{a} l'implantation du language Scheme. M.Sc.~thesis, Department of Computer Science and Operations Research, University of Montreal, May 1986. \bibitem{Felleisen86} Matthias Felleisen, Daniel P.~Friedman, Eugene Kohlbecker, and Bruce Duba. Reasoning with continuations. In {\em Proceedings of the Symposium on Logic in Computer Science}, pages 131--141. IEEE Computer Society Press, Washigton DC, 1986. \bibitem{Scheme311} Carol Fessenden, William Clinger, Daniel P.~Friedman, and Christopher Haynes. Scheme 311 version 4 reference manual. Indiana University Computer Science Technical Report 137, February 1983. \bibitem{Scheme84} D.~Friedman, C.~Haynes, E.~Kohlbecker, and M.~Wand. Scheme 84 interim reference manual. Indiana University Computer Science Technical Report 153, January 1985. \bibitem{Friedman85} Daniel P.~Friedman and Christopher T.~Haynes. Constraining control. In {\em Proceedings of the Twelfth Annual Symposium on Principles of Programming Languages}, pages 245--254. ACM, January 1985. \bibitem{Haynes84} Christopher T.~Haynes, Daniel P.~Friedman, and Mitchell Wand. Continuations and coroutines. In {\em Conference Record of the 1984 ACM Symposium on Lisp and Functional Programming,} pages 293--298. \bibitem{Haynes86} Christopher T.~Haynes. Logic continuations. In {\em Proceedings of the Third International Conference on Logic Programming,\/} pages \todo{x--y}. Springer-Verlag, July 1986. % and to appear in {\it The Journal of Logic Programming.} \bibitem{Engines} Christopher T.~Haynes and Daniel P.~Friedman. Engines build process abstracions. In {\em Conference Record of the 1984 ACM Symposium on Lisp and Functional Programming,\/} pages 18--24. \bibitem{Henderson82} Peter Henderson. Functional Geometry. In {\em Conference Record of the 1982 ACM Symposium on Lisp and Functional Programming}, pages 179--187. \bibitem{Kohlbecker86} Eugene Edmund Kohlbecker~Jr. {\em Syntactic Extensions in the Programming Language Lisp.} PhD thesis, Indiana University, August 1986. \bibitem{Kranz86} David Kranz, Richard Kelsey, Jonathan Rees, Paul Hudak, James Philbin, and Norman Adams. Orbit: An optimizing compiler for Scheme. In {\em Proceedings of the SIGPLAN '86 Symposium on Compiler Construction}, pages 219--233. ACM, June 1986. \bibitem{Landin65} Peter Landin. A correspondence between Algol 60 and Church's lambda notation: Part I. {\em Communications of the ACM} 8(2):89--101, February 1965. \bibitem{McDermott80} Drew McDermott. An efficient environment allocation scheme in an interpreter for a lexically-scoped lisp. In {\em Conference Record of the 1980 Lisp Conference,} pages 154--162. The Lisp Conference, P.O.~Box 487, Redwood Estates CA, August 1980. \bibitem{MITScheme} MIT Department of Electrical Engineering and Computer Science. Scheme manual, seventh edition. September 1984. \bibitem{Muchnick80} Steven S.~Muchnick and Uwe F.~Pleban. A semantic comparison of Lisp and Scheme. In {\em Conference Record of the 1980 Lisp Conference}, pages 56--64. The Lisp Conference, August 1980. \bibitem{Naur63} Peter Naur et al. Revised report on the algorithmic language Algol 60. {\em Communications of the ACM} 6(1):1--17, January 1963. \bibitem{Penfield81} Paul Penfield, Jr. Principal values and branch cuts in complex APL. In {\em APL '81 Conference Proceedings,} pages 248--256. ACM SIGAPL, San Francisco, September 1981. Proceedings published as {\em APL Quote Quad} 12(1), ACM, September 1981. \bibitem{Pitman83} Kent M.~Pitman. The revised MacLisp manual (saturday evening edition). MIT Artificial Intelligence Laboratory Technical Report 295, May 1983. \bibitem{Pitman80} Kent M.~Pitman. Special forms in Lisp. In {\em Conference Record of the 1980 Lisp Conference}, pages 179--187. The Lisp Conference, August 1980. \bibitem{Rees82} Jonathan A.~Rees and Norman I.~Adams IV. T: A dialect of Lisp or, lambda: The ultimate software tool. In {\em Conference Record of the 1982 ACM Symposium on Lisp and Functional Programming}, pages 114--122. \bibitem{Rees84} Jonathan A.~Rees, Norman I.~Adams IV, and James R.~Meehan. The T manual, fourth edition. Yale University Computer Science Department, January 1984. \bibitem{Reynolds72} John Reynolds. Definitional interpreters for higher order programming languages. In {\em ACM Conference Proceedings}, pages 717--740. ACM, \todo{month?}~1972. \bibitem{Rozas84} Guillermo J.~Rozas. Liar, an Algol-like compiler for Scheme. S.~B.~thesis, MIT Department of Electrical Engineering and Computer Science, January 1984. \bibitem{Smith84} Brian C.~Smith. Reflection and semantics in a procedural language. MIT Laboratory for Computer Science Technical Report 272, January 1982. \bibitem{Stallman80} Richard M.~Stallman. Phantom stacks---if you look too hard, they aren't there. MIT Artificial Intelligence Memo 556, July 1980. \bibitem{Imperative} Guy Lewis Steele Jr.~and Gerald Jay Sussman. Lambda, the ultimate imperative. MIT Artificial Intelligence Memo 353, March 1976. \bibitem{Declarative} Guy Lewis Steele Jr. Lambda, the ultimate declarative. MIT Artificial Intelligence Memo 379, November 1976. \bibitem{Debunking} Guy Lewis Steele Jr. Debunking the ``expensive procedure call'' myth, or procedure call implementations considered harmful, or lambda, the ultimate GOTO. In {\em ACM Conference Proceedings}, pages 153--162. ACM, 1977. \bibitem{Macaroni} Guy Lewis Steele Jr. Macaroni is better than spaghetti. In {\em Proceedings of the Symposium on Artificial Intelligence and Programming Languages}, pages 60--66. These proceedings were published as a special joint issue of {\em SIGPLAN Notices} 12(8) and {\em SIGART Newsletter} 64, August 1977. \bibitem{Rabbit} Guy Lewis Steele Jr. Rabbit: a compiler for Scheme. MIT Artificial Intelligence Laboratory Technical Report 474, May 1978. \bibitem{CLoverview} Guy Lewis Steele Jr. An overview of Common Lisp. In {\em Conference Record of the 1982 ACM Symposium on Lisp and Functional Programming}, pages 98--107. \bibitem{CLtL} Guy Lewis Steele, Jr. {\em Common Lisp: The Language.} Digital Press, Burlington MA, 1984. \bibitem{Scheme78} Guy Lewis Steele, Jr.~and Gerald Jay Sussman. The revised report on Scheme, a dialect of Lisp. MIT Artificial Intelligence Memo 452, January 1978. \bibitem{TAOTI} Guy Lewis Steele, Jr.~and Gerald Jay Sussman. The art of the interpreter, or the modularity complex (parts zero, one, and two). MIT Artificial Intelligence Memo 453, May 1978. \bibitem{DOALBP} Guy Lewis Steele, Jr.~and Gerald Jay Sussman. Design of a Lisp-based processor. {\em Communications of the ACM} 23(11):628--645, November 1980. \bibitem{Dream} Guy Lewis Steele, Jr.~and Gerald Jay Sussman. The dream of a lifetime: a lazy variable extent mechanism. In {\em Conference Record of the 1980 Lisp Conference}, pages 163--172. The Lisp Conference, August 1980. \bibitem{Scheme75} Gerald Jay Sussman and Guy Lewis Steele, Jr. Scheme: an interpreter for extended lambda calculus. MIT Artificial Intelligence Memo 349, December 1975. \bibitem{Scheme79} Gerald Jay Sussman, Jack Holloway, Guy Lewis Steele, Jr., and Alan Bell. Scheme-79---Lisp on a chip. {\em IEEE Computer} 14(7):10--21, July 1981. \bibitem{Stoy77} Joseph E.~Stoy. {\em Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory.} MIT Press, Cambridge, 1977. \bibitem{TI85} Texas Instruments, Inc. {\em TI Scheme Language Reference Manual.} Preliminary version 1.0, November 1985. \bibitem{Wand78} Mitchell Wand. Continuation-based program transformation strategies. {\em Journal of the ACM} 27(1):174--180, 1978. \bibitem{Wand80} Mitchell Wand. Continuation-based multiprocessing. In {\em Conference Re\-cord of the 1980 Lisp Conference}, pages 19--28. The Lisp Conference, August 1980. \end{thebibliography}  Received: from MEDIA-LAB.MIT.EDU by MC.LCS.MIT.EDU 21 Jul 86 14:40:25 EDT Received: by MEDIA-LAB.MIT.EDU (5.31/4.8) id AA03625; Mon, 21 Jul 86 14:38:21 EDT Date: Mon, 21 Jul 86 14:38:21 EDT From: William H Coderre Message-Id: <8607211838.AA03625@MEDIA-LAB.MIT.EDU> To: scheme@mc.lcs.mit.edu Subject: Bobcat scheme I did a rather trivial test between CScheme on Bobcat and MacScheme. I suspect my data, since it appeared that CScheme was GCing a LOT. Silly Question: Does anybody know offhand how to tell unix to give Scheme more memory? We have the "deluxe" bobcats with graphics stuff andapproximately 8 megs of core, and we'd like to use them! "Tzima Narki"............................................................bc  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 21 Jul 86 13:55:04 EDT Received: from ti-csl by csnet-relay.csnet id aa27733; 21 Jul 86 13:37 EDT Received: by tilde id AA15867; Mon, 21 Jul 86 11:06:17 cdt Date: Mon 21 Jul 86 10:52:21-CDT From: David Bartley Subject: Re: Performance and Evaluation of Scheme Systems... To: Mike_Wilson%CARLETON.BITNET%wiscvm.wisc.edu@CSNET-RELAY.ARPA, scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA Cc: Bartley%ti-csl.csnet@CSNET-RELAY.ARPA In-Reply-To: Message from "Mike Wilson " of Mon 21 Jul 86 08:04:00-CDT Message-Id: <12224472379.36.BARTLEY@CSC60> >Date: 21 Jul 86 08:04:00 EDT >From: Mike Wilson >Subject: Performance and Evaluation of Scheme Systems... > > I've just been looking through the book _Performance and Evaluation >of Lisp Systems_ (Richard P. Gabriel, The MIT Press). It's got benchmark >results for several simple programs run on the more common lisp systems. >Has anyone run these tests in CScheme/MacScheme/TIScheme? It would be >interesting to see how we stack up. (I have to admit I am *impressed* >with their times for the IBM 3081 and CRAY-XMP. Oh well...) I will be presenting a paper on TI's PC Scheme at the conference on LISP and Functional Programming in Cambridge the first week of August. Part of the paper consists of a brief comparison of PC Scheme and other PC-based LISP implementations on 7 benchmark programs, some of which come from Gabriel's test suite. After the conference, I'll be glad to forward this information to anyone interested. Regards, David Bartley -------  Received: from BLUE.RUTGERS.EDU by MC.LCS.MIT.EDU 21 Jul 86 11:18:22 EDT Date: 21 Jul 86 11:11 EDT (Mon) From: Les To: Chris Haynes Cc: scheme@MC.LCS.MIT.EDU, clowney@BLUE.RUTGERS.EDU Subject: Logic Continuations (Abstract) Hi Chris, I am generally interested in reports on Scheme that have come out of Indiana University, and am currently interested in the report on continuations as applied to the implementation of logic programming in Scheme (Computer Science Department Technical Report No. 183). Where should I inquire about this report and a general index of Scheme related reports? les  Received: from CSNET-RELAY.ARPA by MC.LCS.MIT.EDU 21 Jul 86 10:35:36 EDT Received: from wiscvm.wisc.edu by CSNET-RELAY.ARPA id aa26311; 21 Jul 86 10:33 EDT Received: from (MIKE_WIL)CARLETON.BITNET by WISCVM.ARPA on 07/21/86 at 09:26:48 CDT Received: from Mike_Wilson by CARLETON.BITNET on 21 Jul 86 08:37:12 EDT Date: 21 Jul 86 08:04:00 EDT From: Mike Wilson To: scheme%mc.lcs.mit.edu@CSNET-RELAY.ARPA MMDF-Warning: Parse error in original version of preceding line at CSNET-RELAY.ARPA Subject: Performance and Evaluation of Scheme Systems... Hi, I've just been looking through the book _Performance and Evaluation of Lisp Systems_ (Richard P. Gabriel, The MIT Press). It's got benchmark results for several simple programs run on the more common lisp systems. Has anyone run these tests in CScheme/MacScheme/TIScheme? It would be interesting to see how we stack up. (I have to admit I am *impressed* with their times for the IBM 3081 and CRAY-XMP. Oh well...) .Mike  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 18 JUL 86 17:23:00 EDT Date: Fri, 18 Jul 86 17:22:04 EDT From: Jonathan A Rees Subject: [jtv%fingate.bitnet: Scheme Request] To: scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Fri 18 Jul 86 12:01:19 MDT from Fons Botman Message-ID: <[AI.AI.MIT.EDU].72425.860718.JAR> Thanks to everyone who replied to my query about the Finnish mail I received. Jonathan  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 17 JUL 86 17:01:37 EDT Date: Thu, 17 Jul 86 16:39:45 EDT From: Jonathan A Rees Subject: [jtv%fingate.bitnet: Scheme Request] To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].71910.860717.JAR> If someone could translate the following for me, or even identify what language it's written in, I'd be grateful. Thanks, Jonathan Date: Tue, 15 Jul 86 20:12:38 +0200 From: Jukka Virtanen To: JAR at AI.AI.MIT.EDU Re: Scheme Request Tjaah, ei meilla KAI ole schemea... JOs on, en tieda siita. Juha Heinasella (tre) jh@tut on sellainen REF manual, jota ketselin katselin chanlmersiin mentaessa. Etkos tilannut scheme listat? Vois ton tilata tuolta, jos viitsit. Juki  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 14 JUL 86 21:00:38 EDT Date: Mon, 14 Jul 86 20:58:54 EDT From: Jonathan A Rees Subject: Scheme Request To: goodhart@NOSC-COD.ARPA cc: goodhart@NOSC.ARPA, scheme@MC.LCS.MIT.EDU In-reply-to: Msg of Mon 14 Jul 86 14:25:46 PDT from Curtis L. Goodhart Message-ID: <[AI.AI.MIT.EDU].69927.860714.JAR> Date: Mon, 14 Jul 86 14:25:46 PDT From: Curtis L. Goodhart I am interested in obtaining a version of Scheme that will run on a VAX 11/780 running VMS 4.2 OR a PDP-11/70 running Unix 2.9 . I think most or all of your questions are answered by the contents of the file "LSPMAI;SCHEME IMPLS" available on Internet hosts MIT-MC, MIT-MX, and MIT-AI (I have copied it around to improve its accessibility, in case one or two of these machines are down). By the way, I'll mail this file (about 17K) to anyone who requests it, although if you can FTP it that's preferable. These machines aren't finicky about usernames or passwords or things like that. Jonathan  Received: from bass.ARPA by MC.LCS.MIT.EDU 14 Jul 86 17:27:39 EDT Received: by bass.ARPA (5.31/4.7) id AA09836; Mon, 14 Jul 86 14:25:49 PDT Received: by cod.ARPA (5.31/4.7) id AA13068; Mon, 14 Jul 86 14:25:46 PDT Date: Mon, 14 Jul 86 14:25:46 PDT From: Curtis L. Goodhart Message-Id: <8607142125.AA13068@cod.ARPA> To: scheme@mit-mc.ARPA Cc: goodhart@nosc.ARPA Subject: Scheme Request ------- I am interested in obtaining a version of Scheme that will run on a VAX 11/780 running VMS 4.2 OR a PDP-11/70 running Unix 2.9 . Can you provide me some info on this? I also recall that I may be able to FTP a copy of Scheme? Are there user manuals available too? Also, I will be at MIT in the Fall and probably take Ableson, and Sussman's course, in which Scheme is used. Are there any crucial differences between the version I might get through you and the version and MIT? Thanks, Curt Goodhart (goodhart@nosc on the arpanet) -------  Received: from AI.AI.MIT.EDU by MC.LCS.MIT.EDU via Chaosnet; 11 JUL 86 18:04:12 EDT Date: Fri, 11 Jul 86 18:04:44 EDT From: Jonathan A Rees Subject: test To: scheme@MC.LCS.MIT.EDU Message-ID: <[AI.AI.MIT.EDU].68642.860711.JAR> Test message. Please ignore.