Path: utzoo!utgpu!news-server.csri.toronto.edu!cs.utexas.edu!sdd.hp.com!usc!snorkelwacker.mit.edu!ai-lab!zurich.ai.mit.edu!jinx From: jinx@zurich.ai.mit.edu (Guillermo J. Rozas) Newsgroups: comp.lang.scheme Subject: Re: Return value of SET!/SETQ/=, and order of evaluation Message-ID: Date: 2 Apr 91 18:44:05 GMT References: <9104011524.AA09177@schizo> Sender: news@ai.mit.edu Reply-To: jinx@zurich.ai.mit.edu Organization: M.I.T. Artificial Intelligence Lab. Lines: 24 In-reply-to: carlton@husc10.harvard.edu's message of 1 Apr 91 23:25:43 GMT I don't really want to get into a ()/#f argument. I do have one question, though: if you think that values other than #f should be false, why stop with ()? Why shouldn't #(), "", and 0 be false? Or, if you want to have (eq? #f '()), why not have those other things also all be the same object? The only reason it matters (and people give different weight to this reason) is that Common Lisp defines them to be the same object. If you want to have a single shared environment where you can mix and match Scheme and Common Lisp programs without going through many contortions, you need to make these objects EQ? The EQ-ness of the symbol NIL and the empty list in Common Lisp can be handled easily inside of the CL package system, without affecting Scheme's NIL symbol. There is no similar solution for #f vs. (). At a more abstract level, I have no problem with making as many of these objects as you want EQ? in your implementation. Conceptually it does not make a difference, any possible choice is consistent. It is an arbitrary decision either way that only affects portability. Unfortunately the IEEE standard does not allow this freedom, and therefore precludes implementations where Scheme and CL coexist reasonably.