Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!usc!sdd.hp.com!think.com!snorkelwacker.mit.edu!bloom-beacon!dont-send-mail-to-path-lines From: mkatz@garlic.stanford.EDU (Morris Katz) Newsgroups: comp.lang.scheme Subject: Return value of SET!/SETQ/=, and order of evaluation Message-ID: <9104021925.AA18786@garlic.Stanford.EDU> Date: 2 Apr 91 19:25:48 GMT References: <9104011524.AA09177@schizo> Sender: daemon@athena.mit.edu (Mr Background) Organization: The Internet Lines: 72 Reply-To: gjc@mitech.com Date: Fri, 29 Mar 91 13:23:49 EDT From: gjc@mitech.com Actually, throw in the fact that in Scheme the empty list and logical false are DIFFERENT. As a LISP programmer for over 10 years I find it much more comfortable to program in C than in the latest Scheme standards. HEY GUYS: I think you have really blown it, BIG TIME. In C, I use the return value of assignments all the time. It is a very common programming practice. Also, I use the fact that the NULL pointer is logical false. And also, I use the order of evaluation implied by "&&" and "||" quite a bit. And it isn't just me, it is hundreds of thousands of C programmers. The way that Scheme is defined now, WELL, it just forces the programs to be much more verbose, with lots of extra LAMBDA/LET statements, and local variables, and even extra assignments. You obviously differ in your programming style and esthetics from the RNRS committee. We felt that the utility of the features we removed were not matched by the obscurity they introduced into programs. You obviously disagree. And I think it is just "peachy keen" and even "neeto" that that is exactly the kind of extra crap that Scheme Compiler Righters (writers?) think they there compilers and so good at. Fact: I think my compilers are good at removing extra local variables and crap Therefore: I think I will design the language to force users to introduce a lot of extra crap so that my compiler gets to show how good it is at removing it. It sure starts to smell like PASCAL to me. Save your pejorative flaming for someone else. If you want to have a constructive discussion of the issues, that is fine; but, lets restrict the discussion to a technical one, rather than a flame war. No longer do we have a LISP which is EXPRESSION oriented in the way that BLISS and quite a bit of C was. Instead we get something more of the flavor of the old languages with the statement/expression classification. There are some things in Scheme which are clearly "STATEMENTS" that is, forms which make no sense to use in a "EXPRESSION" (value) context. There there are things which are expressions. OK. Is a procedure call important? If so, then why is it not possible to define a procedure which has no defined return value? That is, why is it not possible to extend the language (via procedure definitions) in the class of STATEMENTS (e.g. built in SET!-CAR vs my own defined SET!-FROB)? Why only in the class of EXPRESSIONS? I agree that the user should be able to create a proceudre which returns no value. My multiple values proposal addressed this issue by allowing for the return of no values (a multiple value of arity 0). This is quite different that SET! whose return value is unspecified. Lack of specification allows different implementers to select different return values and stil be compliant with the standard. Specifying that SET! must return no value would remove this flexibility. -------------------- Morry Katz katz@cs.stanford.edu --------------------