Subject: Re: two questions about strings From: Erik Naggum <firstname.lastname@example.org> Date: 28 Jul 2002 18:37:53 +0000 Newsgroups: comp.lang.lisp Message-ID: <email@example.com> * Nils Goesche | (defun isupper (char) | (char<= #\A char #\Z)) Despite all the good intentions and efforts to help this lost newbie, I think it is a mistake to try to help people who ask such questions. (This reply is not directed specifically towards Nils.) Defining your own because the standard function does not have the same name as in C is wrong. We already have upper-case-p, lower-case-p, alpha-char-p, etc, in Common Lisp. Reinventing wheels to look more like C will do nobody any good. Even asking for strlen and isupper is extremely counterproductive. People who ask for help in Common Lisp but refuse to relinquish their past language remind that I want to learn French, but only to hear it and read it. The utter helplessness of most French-speakers' attempt to produce English is so grating on my ears that I not only would like to be relieved of listening to it, speaking their language to them would probably be just as atrocious (almost like pronouncing "fromage" like "fromidge"). The original poster has no problem with strings, he has a problem with his willingness to learn Common Lisp. Much could be said about this affliction of the mind that causes people to assume that what they do not understand does not matter, that they have reached such a level of omniscience that they no longer need to observe and listen and learn. Having learned enough, some people evidently stop learning altogether. What they learned first is the standard for everything that comes later. That the probably only _truly_ random element in anyone's life is the order in which they experience things, seems not even to be underststandable -- they somehow believe that the order they run into them is universalizable and important, that first impressions really tell you everything you need to know about something. I have seen people who have the mental capacity only for the transition from "have not experienced" to "have experienced", and who are unable to make a distinction between their observations and their conclusions, such that they are unable to change their conclusions about what they observed. They walk around like they had CD-Rs for brains. What is the length of a string? C's string representation has no room for an allocated length vs an active length. C's string representation has no concept of substrings. C's strings cannot contain all possible characters. C's strlen is actually (position 0 <string> :key #'char-code) and is O(n). Forget "strlen". For our immediate purposes, there is no "strlen". "strlen" does not _exist_. Common Lisp has vectors with fill-points, and strings are vectors which are sequences and arrays. Numerous functions that in other languages only work on strings, work on sequences in Commo Lisp. Functions like search, match, find, position, etc, are much more general than string functions in other languages. A string with a fill-pointer has a total and an active length. Most sequence functions accept bounding indices, start and end indices that make it possible to use substrings without modifying the target strings. Common Lisp even has displaced arrays if you really need a substring without copying the string contents. Common Lisp has string-streams to read from and write to strings in memory. Common Lisp has real charcters, not just small integers. Common Lisp's characters are not bytes, so when Unicode came along, there was no need to make extensive library and language changes. Common Lisp supports base and extended characters and hence base-string in addition to the general string. Common Lisp is a big-city language. Spit out the hayseed, pronounce "shit" with one syllable and "shotgun" with two. You're not in Kansas, anymore. C is the language of the poor farmer village where the allocation of every seed and livestock matters, where taxes are low and public service non-existent. Appreciating the value of a large language is evidently hard for many people, just like many people find themselves miserable in the big city and go to great lengths to create a small village for themselves in the city where everything is like it used to be where they came from. Common Lisp can accomodate people who want to program in any old language and re-create what they are used to, but if they want to get the most ouf ot it, the only way to do it is to adapt to the language and accept that somebody else may be better than you are at designing languages. -- Erik Naggum, Oslo, Norway ***** One manslaughter is another man's laughter. Act from reason, and failure makes you rethink and study harder. Act from faith, and failure makes you blame someone and push harder.