Subject: Re: Why is Scheme not a Lisp? From: Erik Naggum <erik@naggum.net> Date: Sat, 16 Mar 2002 02:59:30 GMT Newsgroups: comp.lang.lisp Message-ID: <3225236382019921@naggum.net> * Thomas Bushnell, BSG | But then that means that CL macros are not hygenic, because FLET captures | bindings in exactly the ways that are the point behind hygenic macros. | | Erik said if you separate function and variable namespaces, then you | don't need hygenic macros. No, I said quite a bit more than that. Separating function and variable values is a necessary condition, not a sufficient condition to not need hygienic macros. Please return to the textbooks of whatever introductory course at your university or high school deals with argumentation and logic and LOOK UP THE DIFFERENCE BETWEEN NECESSARY AND SUFFICIENT, because you have truly not understood this and repeatedly make the mistake of conflating them. I recommend a book I came across by accident 12 years ago: The Art of Reasoning by David Kelley. I have the first hardcover edition from 1988, but I see there is a third edition out in paperback: http://www.amazon.com/exec/obidos/ASIN/0393972135 There are probably lots and lots of books about thinking, but most of them seem to start with the assumption that you cannot think and thus have to learn it. This book starts with assumption that you can think, you only need to train yourself and stay away from the mistakes. Thinking is an acquired skill, but most people have somehow gotten by. There is some value to not ignoring that fact. However, many academics seem to have lost the ability to think clearly somewhere on the way to become extremely specialized in some arbitrarily complex field and they have certainly been rewarded with a highly characterized version of real thinking skills that is more about not feeling than about thinking. | That's true only because | | 1) Global definitions are almost always functions. | 2) Global data definitions have special names, by convention , and | people never shadow those. | 3) People don't make local bindings in the function namespace. | | It's right that Lisp2 doesn't force you to follow those rules, but if you | don't follow them, then you can't claim that CL macros are hygenic. Excuse me for knowing the Common Lisp language so well that I tend to forget that there are people out there with a strong desire _not_ to learn it before they shoot their mouths off. Now is a good tiem for you to wonder what it means that I also talked about packages and try to figure out what a Common Lisp programmer must know in order to use his language. In particular, a Common Lisp programmer has either read and understood 11.1.2.1.2 in the standard, or he has an implementation of Common Lisp (or a teacher) that enforces it. In either case, he learns that he can trust that if he sees a function call to common-lisp:car, he _knows_ what it will do, with absolute certainty -- no need to check the lexical environment, no need to afraid someone clobbered it, no need to scrub off the non-hygienic crap that Scheme accretes because it has no package concept _and_ no distinction between functional and variable values so all the good variables names are taken. The reason Scheme needs hygienic macros is the same as the reason Scheme programmers do not call their arguments "list", but "lst". We do not have _that_ problem in Common Lisp, either. In short, Common Lisp is already a clean language, it does not need hygiene to clean up after its design decisions. /// -- In a fight against something, the fight has value, victory has none. In a fight for something, the fight is a loss, victory merely relief.