From: Paul Dietz
Subject: Simple characters in the CL Standard
Date: 
Message-ID: <352E4957.B300F7E3@interaccess.com>
I have a question for CL Standards gurus:

Is there a standard way in Common Lisp to determine if a character is a
simple character?

I'd guess that  (char= (code-char (char-code c)) c) would work, but as
far as I can tell the standard doesn't say that code-char doesn't set
any implementation defined attributes to non-null values.

The reason I am asking is that a string containing simple characters is
supposed to print readably when *PRINT-READABLY* is true.  However, in
two lisps I've tried the string containing a single null character,
produced by

	(make-string 1)
or by
	(make-string 1 :initial-element (code-char 0))

prints as ··@", even with *PRINT-READABLY* set to true.  This reads back
in as a two character string (^ and @).

	Paul Dietz
	·····@interaccess.com

From: Erik Naggum
Subject: Re: Simple characters in the CL Standard
Date: 
Message-ID: <3101242725805421@naggum.no>
* Paul Dietz
| I have a question for CL Standards gurus:

  I'll try to answer, anyway.

| Is there a standard way in Common Lisp to determine if a character is a
| simple character?

  does (typep <character> 'base-char) cut it?

| However, in two lisps I've tried the string containing a single null
| character, produced by
| 
| 	(make-string 1)
| or by
| 	(make-string 1 :initial-element (code-char 0))
| 
| prints as ··@", even with *PRINT-READABLY* set to true.  This reads back
| in as a two character string (^ and @).

  do you mean that

  (length (read-from-string (write-to-string (string (code-char 0)) :readably t)))

  returns 2, not 1?

  I can't see that it does that anywhere I try it.  what do you do to make
  the length become 2?
  
#:Erik
-- 
  religious cult update in light of new scientific discoveries:
  "when we cannot go to the comet, the comet must come to us."
From: Paul Dietz
Subject: Re: Simple characters in the CL Standard
Date: 
Message-ID: <352EC628.29F0942@interaccess.com>
> | Is there a standard way in Common Lisp to determine if a character is a
> | simple character?
> 
>   does (typep <character> 'base-char) cut it?

I don't think so, at least not portably. A simple character is defined
to be a character with no attributes except the character code.  I don't
see where it says in the standard that a base character has to be
simple, or that simple characters have to be base characters.  A simple
character in a string must be a base character, though.


>   (length (read-from-string (write-to-string (string (code-char 0)) :readably t)))
> 
>   returns 2, not 1?
> 
>   I can't see that it does that anywhere I try it.  what do you do to make
>   the length become 2?

Oops.  My mistake.  Emacs was displaying it as ·@ but, of course, it was
only one character.

ObSqueakyVoice: "Never Mind."

	Paul
From: Erik Naggum
Subject: Re: Simple characters in the CL Standard
Date: 
Message-ID: <3101287279591069@naggum.no>
* Paul Dietz
| I don't think so, at least not portably.  A simple character is defined
| to be a character with no attributes except the character code.  I don't
| see where it says in the standard that a base character has to be simple,
| or that simple characters have to be base characters.  A simple character
| in a string must be a base character, though.

  I couldn't find such a requirement myself, but STANDARD-CHAR _is_ defined
  to be a simple character ("any character that is not simple is not a
  standard character"), although this excludes most control characters and
  any 8-bit characters you may have.  however, no Lisp I have found have
  answered true to (typep #3\a 'base-char) or (typep #\M-a 'base-char),
  although the reason is that Allegro CL answers NIL, CMUCL 17f doesn't
  support bits or fonts to begin with, and CLISP doesn't support BASE-CHAR.

  however, I might think the question is moot, now that the minor confusion
  over ··@" has been resolved.

#:Erik
-- 
  religious cult update in light of new scientific discoveries:
  "when we cannot go to the comet, the comet must come to us."