Subject: Re: two questions about strings
From: Erik Naggum <>
Date: 28 Jul 2002 18:37:53 +0000
Newsgroups: comp.lang.lisp
Message-ID: <>

* 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.