Path: utzoo!utgpu!jarvis.csri.toronto.edu!rutgers!apple!bloom-beacon!ZOHAR.AI.MIT.EDU!jar From: jar@ZOHAR.AI.MIT.EDU (Jonathan Rees) Newsgroups: comp.lang.scheme Subject: semantics of DEFINE Message-ID: <8905262124.AA04820@zohar> Date: 26 May 89 21:24:13 GMT References: <59021@yale-celray.yale.UUCP> Sender: daemon@bloom-beacon.MIT.EDU Reply-To: jar@zurich.ai.mit.edu Organization: The Internet Lines: 30 Date: 30 Apr 89 20:39:25 GMT From: Krulwich-Bruce@yale-zoo.arpa (Bruce Krulwich) A while ago I posted the suggestion that non-top-level DEFINEs do the same thing as top-level DEFINEs, ie, side effect the top level. ... This interpretation is the one adopted by the current version of T (although it's not an explicit decision on the part of the T designers) and I believe is the interpretation used by most LISP dialects. ... Most of the responses that I got said either like "well, Abelson and Sussman used the 'local' interpretation, so we really should stick to it" or "well, local non-top-level DEFINEs add fewer parentheses than nesting LETRECs." Does anyone have other (theoretical or functional) reasons for this decision?? It *was* an explicit decision on the part of the designers, made in 1981. It was an attempt to have something similar to the MIT Scheme define but without coupling it to the syntax or semantics of lambda. We never properly implemented the feature (LOCALE, for those of you who have seen the T manual) that would have made it coherent, however. Personally, I now would like to see T changed either to implement R3RS define or to allow defines only at "top level" (given a suitable non-global definition of "top level"). I would prefer to see the desired functionality achieved not by a mechanism like T's but by either (a) a new construct implemented as a macro or (b) some kind of module system. I think a number of people are working on this design problem now.