1 Welcome to PLT Scheme
2 Scheme Essentials
3 Built-In Datatypes
4 Expressions and Definitions
5 Programmer-Defined Datatypes
6 Modules
7 Contracts
8 Input and Output
9 Regular Expressions
10 Exceptions and Control
11 Iterations and Comprehensions
12 Pattern Matching
13 Classes and Objects
14 Units (Components)
15 Reflection and Dynamic Evaluation
16 Macros
17 Performance
18 Running and Creating Executables
19 Compilation and Configuration
20 More Libraries
Bibliography
Index
Version: 4.0.2

 

3.3 Characters

A Scheme character corresponds to a Unicode scalar value. Roughly, a scalar value is an unsigned integer whose representation fits into 21 bits, and that maps to some notion of a natural-language character or piece of a character. Technically, a scalar value is a simpler notion than the concept called a “character” in the Unicode standard, but it’s an approximation that works well for many purposes. For example, any accented Roman letter can be represented as a scalar value, as can any Chinese character.

Although each Scheme character corresponds to an integer, the character datatype is separate from numbers. The char->integer and integer->char procedures convert between scalar-value numbers and the corresponding character.

A printable character normally prints as #\ followed by the represented character. An unprintable character normally prints as #\u followed by the scalar value as hexadecimal number. A few characters are printed specially; for example, the space and linefeed characters print as #\space and #\newline, respectively.

Reading Characters in Reference: PLT Scheme documents the fine points of the syntax of characters.

Examples:

  > (integer->char 65)

  #\A

  > (char->integer #\A)

  65

  > #\λ

  #\λ

  > #\u03BB

  #\λ

  > (integer->char 17)

  #\u0011

  > (char->integer #\space)

  32

The display procedure directly writes a character to the current output port (see Input and Output), in contrast to the character-constant syntax used to print a character result.

Examples:

  > #\A

  #\A

  > (display #\A)

  A

Scheme provides several classification and conversion procedures on characters. Beware, however, that conversions on some Unicode characters work as a human would expect only when they are in a string (e.g., upcasing “ß” or downcasing “Σ”).

Examples:

  > (char-alphabetic? #\A)

  #t

  > (char-numeric? #\0)

  #t

  > (char-whitespace? #\newline)

  #t

  > (char-downcase #\A)

  #\a

  > (char-upcase #\ß)

  #\ß

The char=? procedure compares two or more characters, and char-ci=? compares characters ignoring case. The eqv? and equal? procedures behave the same as char=? on characters; use char=? when you want to more specifically declare that the values being compared are characters.

Examples:

  > (char=? #\a #\A)

  #f

  > (char-ci=? #\a #\A)

  #t

  > (eqv? #\a #\A)

  #f

Characters in Reference: PLT Scheme provides more on characters and character procedures.