jeff@aiai.ed.ac.uk (Jeff Dalton) (02/13/91)
In article <ALMS.91Feb12093856@ministry.cambridge.apple.com> alms@cambridge.apple.com (Andrew L. M. Shalit) writes: >In contrast, Lisp (whether Common Lisp or Scheme) is supposed to be a >language that people actually use day to day for programming. The >common complaint about Scheme is that it is too small for real work, >that it needs lots of libraries. This would be fine, if it had the libraries. A comparison with Prolog is instructive. Prolog is, in a sense, even smaller than Scheme and more extreme about putting things in libraries. Almost everyone uses append/3, for example, but it isn't normally built in. However, there is a large and widely available Prolog library. The library more or less started at Edinburgh but was later maintained at su-score. An important reason why it exists is that programmers involved in large Prolog projects in Edinburgh made an effort to write reusable routines in the form of libraries and to collect them in one place. Similar things happen for Lisp, but in a less coherent way. The "Scheme is too small" complaint would be defeated if there were a standard or semi-standard library that was used with Scheme as a mater of course. >I think the problem with Common Lisp is a combination of size, >redundancy, and inconsistency. So, maybe there *is* a parallel >[to CISC architectures] after all :-) I am not sure what the "inconsistency" in CL is supposed to be. Can you elaborate. When we come to redundancy, I think this presupposes that a good language ought to direct the programmer towards a single good way of doing things. I think there are a often number of good ways to do something and that programmers are capable of making up their own minds which to use. If we start saying "no redundancy", then can never use such things as Dick Water's Series macros because we already have a way of doing loops. Indeed, I think it's a Good Think that Lisp allows programmers to define new ways of doing things without leaving the language. This brings us to size. As I've said before, I think there is a problem with _implementations_ that do not let you produce a small system when you don't need a big one. For example, if you're doing iteration only one way, you shouldn't have to have all the other ways around when you don't need them. A small language with libraries tends to accomplish this automatically, but for historical reasons Common Lisp wasn't presented that way. -- jeff -- N.B. This is followup-to: comp.lang.lisp, because it branched off from a discussion there, and because I wanted to avoid adding to several newsgroups. So you may want to edit the newsgroups line.