Subject: Re: Which one, Lisp or Scheme? From: Erik Naggum <erik@naggum.no> Date: 1997/02/01 Newsgroups: comp.lang.lisp,comp.lang.scheme Message-ID: <3063828476472680@naggum.no> I find it symptomatic of Schemers attacks on Common Lisp that they are ignorant, arrogant, and so devoid of correctnes and precision as to merit no other badge than "prejudice". * Ray S. Dillinger | In scheme, a function is simply a value, like a number or a string. In | CL, a function is in a separate class -- it has to be funcalled for | example if you're evaluating to it. Ray, you don't know what you're talking about. it also looks as if you don't know what a namespace is. a namespace is simply a mechanism to refer to objects by names taken from different sets of possible names. whether an object is found by a name in one namespace or in another makes no difference to the object. you seem to believe it does. let me paraphrase your complaint with an example of a similar complaint about Scheme: in CL, a function is simply a value, like a number or string. to use any value as a function, apply `funcall' to it. in Scheme, a value has to be placed first in a form if you wish to call it as a function. this is unlike the use of any other variable, which do not need this special position in a form when using their value. I guess you will automatically think the above is a specious argument, and will ignore it, without having taken the care to examine the fact that it is entirely valid, and that its main function is to show that your position is not one of understanding. occasionally, we hear that syntax is unimportant, that what matters is the semantics of languages, indeed that arguments about syntax are _invalid_ because all languages are Turing equivalent. however, when some Scheme users need to debunk Common Lisp, it is tragically common for them to stumble in the syntax, and make such utterly false accusations as the above complaints about namespaces. let's look at one of your ignorant, invalid examples: | ((function-that-returns-another-function) argument1 argument2) vs | (define-function ?foo (function-that-returns-another-function)) | (funcall ?foo argument1 argument2) I find it interesting that most Common Lisp users who criticize Scheme do so with syntactically correct Scheme programs or real examples, whereas Scheme users who criticize Common Lisp generally don't have a clue. here's how it would be done by somebody who had actually _seen_ Common Lisp: (funcall (function-that-returns-another-function) argument1 argument2) | I'm just guessing about the use of the define-function syntax; I must | admit it's darn weird as far as I can tell to have different defines for | everything when it's only one operation. maybe if you didn't guess as much, you wouldn't make a fool of yourself. and if you had paid attention, you would have known that it isn't only one "operation" that is performed by differently-named functions, unless you define "operation" so generally as to make all computers perform the same operation, namely heat their immediate surroundings. I wonder why so many people who love Scheme tend to be so unbelievably arrogant in their belief that Scheme is superior that they don't even bother to _learn_ anything about the languages they compare to. this really makes me wonder what made them love Scheme in the first place. it surely cannot be intelligent, rational, or informed balancing of features. it cannot be based on a desire to study and learn languages. instead, Ray, explains to us, it's based on "a trifling effort of memorization and practice", if I understood what he meant by that, alien as it is to me. | But the point is that functions are treated differently than other values | in CL. that may be your point, but it is a _fact_ that functions are treated just like other values in Common Lisp. the difference between Common Lisp and Scheme is that Scheme evaluates the first element of a form to find which function to call, whereas Common Lisp regards the first element of a form as a constant symbol, and looks up the function definition of that symbol. I'm rather surprised by the many Scheme users who fail to understand such a simple _fact_, instead preferring to make various bogus "points". every such "point" reduces the credibility of the entire Scheme community. | You can't insert a subexpression evaluating to your function in place of | the function the way you can with any other value. yes, you can. the problem is that you're very confused, mostly because you treat Common Lisp as if it were Scheme, and then complain when it isn't. Common Lisp does not _evaluate_ symbols to a function. period. | You can't use your standard assignment statement to assign a value to a | variable if that value happens to be of type function. Ray, you don't know what you're talking about. | And numerous other warts and inconsistencies. I'm sorry to say that you seem to produce the warts you wish to attack straight out of thin air, and that you wouldn't find half as many if you had bothered to study Common Lisp before your ignorant attacks on it. | But Scheme has the cleanest, simplest, and most consistent rules of | operation and evaluation of any language I've ever come across, and that | enables me to write correct programs much more easily; I always know | exactly what an operation means, because it always means exactly the same | thing, and doesn't have weird exceptions like "you can always substitute | an expression evaluating to a value for the value itself in any | expression -- UNLESS it's a function..." and "the value of ?foo is 27 -- | UNLESS it's the function ?foo instead of the variable ?foo -- and so on. I find this entertaining. you don't know diddlysquat about Common Lisp, yet speak with a stunning degree of certainty in which you prove beyond _any_ reasonable doubt that you don't even care to look things up, yet you know _exactly_ what Scheme does. yeah, right. I think the latter is pure hyperbole -- that the degree to which you "know exactly" what Scheme does is the same degree to which you know vaguely how Common Lisp works. perhaps the difference between Scheme and Common Lisp programmers is that the Common Lisp programmers _know_ they need to look things up, whereas the Scheme programmers always _think_ they never need to. I guess that's also why Common Lisp has documentation strings and Scheme doesn't. the lack of documentation strings has always bothered me in Scheme. (yes, it's been rehashed a few times. I know all the arguments.) | That, I suppose, is why I love scheme -- no other language gives me such | returns of precision and capability for such a trifling effort of | memorization and practice. this is _very_ amusing. your utter lack of precision in your description of Common Lisp really drives a stake through the heart of your arguments. but I guess that's the _real_ return you get from a trifling effort of memorization and practice. why do so few Scheme users seem to care enough to be accurate? could it be influence from the language? or could it be that people who _don't_ care flock to Scheme? I'm led to wonder by the many Scheme proponents who like to attack strawmen and problems only of their own imagination. #\Erik -- 1,3,7-trimethylxanthine -- a basic ingredient in quality software.