• 検索結果がありません。

カーソルを 1 文字先に移動します (f は forward character の f)

1. 場合 2-1: (car s) が数値データの場合

6.1 さまざまなデータ型 ( その 2)

6.1.1 文字

文字

(character)

は文字通り、A 6 などの「文字」を表すデータ型です。

Scheme

プロ

グラム中で文字データは、たとえば #\A

(

大文字の

A)

とか、#\b

(

小文字の

b)

のように、

#\h文字i または #\h文字の名前iといった形式で書かれます。

#\h文字iの形式での、文字データの例を見てみましょう。

> #\A

#\A#<unspecified>

> #\b

#\b#<unspecified>

> (display #\A) A#<unspecified>

> (display #\b) b#<unspecified>

この例で分かるように、文字データは自己評価的です。

117

次は #\h文字の名前i の例を見てみましょう。なおh文字の名前iによる文字の表し方 では、空白文字や改行文字などの制御文字

(control character)

を表すのに使います1

たとえば #\space は、空白文字を表します。

> (display #\space)

#<unspecified>

> (display #\tab)

#<unspecified>

> (display #\del)

^?#<unspecified>

> (display #\bel)

^G#<unspecified>

ASCII

文字集合での制御文字の一覧を、

Appendix A

に掲げたので参考にして下さい。

#\h文字iの 形式で 文字を 指定する場合には 大文字と 小文字の 区別は あ り ますが 、

#\h文字の名前iの場合には大文字

/

小文字は関係ありません。

> (equal? #\A #\A)

#t

> (equal? #\A #\a)

#f

> (equal? #\tab #\tab)

#t

> (equal? #\tab #\TAB)

#t

> (equal? #\tab #\TaB)

#t

それぞれの文字には、その文字を表す整数が割り当てられています。

ASCII

文字集合の

場合では、文字

A

には

(10

進数で

) 65

が割り当てられています2。文字に割り当てられた 整数のことを、その文字の文字コード

(character code)

といいます。文字コード に関連し た手続きには、以下のものがあります。

} (char->integer h文字i)

|

h文字iの文字コード を返します。

1制御文字とは、

A

z

のように文字そのものを表すのではなく、カーソルを次の行に移動させたり、画 面の表示を消去するといった、カーソルや画面などを制御するためのものです。制御文字は普通の文字のよ うに入力できないので、名前や文字コード

(Appendix A

参照

)

によって文字を指定します。

2文字とそれにどの整数を割り当てるかを表にしたものが 、文字集合

(character set)

です。

ASCII

文字集

合や

EBCDIC

文字集合は代表的な文字集合です。

} (integer->char h文字コード i)

|

h文字コード i の文字を返します。

次に、文字と文字との比較について説明します。文字と文字の間には順序が付けられて いて、この順序に従って大小関係が決められています。たとえば 、A は B よりも小さい、

となっています。文字と文字との比較のための手続きには、次のものが用意されています。

なお、名前の最後に -ci の付いた手続きは 、大文字と小文字の区別をせずに比較をしま す3

} (char=? h文字1i h文字2i)

|

h文字1i

=

h文字2i

?

} (char<? h文字1i h文字2i)

|

h文字1i

<

h文字2i

?

} (char>? h文字1i h文字2i)

|

h文字1i

>

h文字2i

?

} (char<=? h文字1i h文字2i)

|

h文字1ih文字2i

?

} (char>=? h文字1i h文字2i)

|

h文字1ih文字2i

?

} (char-ci=? h文字1i h文字2i)

|

h文字1i

=

h文字2i

?

} (char-ci<? h文字1i h文字2i)

|

h文字1i

<

h文字2i

?

} (char-ci>? h文字1i h文字2i)

|

h文字1i

>

h文字2i

?

} (char-ci<=? h文字1i h文字2i)

|

h文字1ih文字2i

?

} (char-ci>=? h文字1i h文字2i)

|

h文字1ih文字2i

?

では、これらの実行例を見てみましょう。

3-ciは、

case insensitive

の略で、大文字

/

小文字の違いは気にしない、という意味です。

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

#t

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

#f

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

#t

> (char<? #\G #\H)

#t

> (char<? #\G #\G)

#f

> (char>? #\5 #\8)

#t

与えられたデータが文字型かど うかを調べるには、手続きchar?を使います。

} (char? hデータi

|

hデータiの値が文字データなら真 #t を、そうでなければ偽 #f を返します。

> (char? #\A)

#t

> (char? "A")

#f

文字は、 数字とかアルファベット文字とかのいくつかのグループに分かれています。文 字がどのグループに属するかを調べる手続きも用意されています。

} (char-alphabetic? h文字i)

|

h文字iはアルファベット文字か

?

} (char-numeric? h文字i)

|

h文字iは数字か

?

数字とは、0

,

1

,...,

9 をいいます。

} (char-whitespace? h文字i)

|

h文字iは空白文字か

?

空白文字とは、

(ASCII

文字集合の場合

)

スペース

(space)

タブ

(tab)

、改行

(line feed)

、改頁

(form feed)

、復改

(carriage return)

のことをいい

ます。

} (char-upper-case? h文字i)

|

h文字iは大文字か

?

} (char-lower-case? h文字i)

|

h文字iは小文字か

?

実行例を以下に示します。

> (char-alphabetic? #\b)

#t

> (char-alphabetic? #\4)

#f

> (char-number? #\z)

#f

> (char-number? #\0)

#t

> (char-whitespace? #\space)

#t

> (char-whitespace? #\tab)

#t

> (char-upper-case? #\A)

#t

> (char-upper-case? #\b)

#f

> (char-lower-case? #\A)

#f

> (char-lower-case? #\z)

#t

大文字から小文字に、あるいはその逆を行なうには、次の手続きを使います。

} (char-upcase h文字i)

|

h文字iを大文字に変換します4

} (char-downcase h文字i) h文字iを小文字に変換します5

文字を表示するには、手続き display と write を使います。 この他、write-char を 使って文字を表示することもできます。

> (write-char #\9) 9#<unspecified>

> (write-char #\newline)

#<unspecified>

4;5これらの手続きにおいて、h文字iは必ずしもアルファベット文字である必要はありません。h文字i アルファベット文字のときに大文字または小文字に変換し 、それ以外のときはh文字iをそのまま返します。

文字と文字列との橋渡しをする手続きとして、以下の

2

つが用意されています。

} (list->string h文字のリストi)

|

h文字のリストi を、文字列にします。

} (string->list h文字列i)

|

h文字列iを、文字のリストにします。

実行例を見てみましょう。

> (list->string (list #\p #\o #\o #\h))

"pooh"

> (list->string '())

""

> (string->list "owl") (#\o #\w #\l)