[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

char, string, etc.



Reiko TAKAHASHI  (高橋玲子)writes:

> 「文字列」というのは、一つずつ文字の入った透明な箱(がつながったもの)の
> ようなもので、箱があって初めて、別の箱とつながったり離れたり(もしかした
> らほかにもいろいろ)できる。
> 文字自体ではなく、箱がつながっているからこそ、真ん中の文字だけを他の文字
> と入れ替えたり、そういうこともできる……んですね?

はい、そうです。

> 「文字」が便利な点としては、たとえば1個の文字を取り出して、それがなんな
> のかをチェックしたいような場合、「文字」として扱うとチェックにASCIIコード
> が使えたり、比較のときにもなにかと便利だったりするのでしょうか?

はい、歴史的にはそういう理由が大きいと思います。

> (ASCIIコードについては、点字のNABCC等の話で聞いたことがあります。アルフ
> ァベットや数字やコントロールコードにふつうの数字が割り当てられているコー
> ド体系(?)ですよね?)

そうです。大文字のAは65, 小文字のaは97, 空白は32です。別に覚える必要は
ないのですが、プログラムを書いているうちには自然と覚えてしまいます。

> } 箱の中身を変更するには aset を使います。
> } 
> } (setq xyz "abc")
> } (aset xyz 0 ?p)
> } xyz => "pbc"
> } 
> } 箱の長さを自動的に伸ばすことはできません。
> } 
> } (setq xyz "abc")
> } (aset xyz 2 ?q)
> } xyz => "abq"
> } (aset xyz 3 ?e) => エラー

>  自動的に縮めるのはどうですか?

残念ながらできません。

> たとえば、(aref ...)で文字列の中身をチェックして、改行コードだったら削除
> する……とかはできるでしょうか?

できません。そういうことをやりたい場合は、丁度いい長さの文字列を新たに
作り、必要な部分を元の文字列からコピーすることになります。聞くと面倒臭
そうですが、実際には以外と簡単です。

> } 「文字」がアルファベットの場合、「文字を表す数値」はその ASCII コード
> } になります。

>  ただの数字なのか、文字を表した数字なのかは、どうやって区別されるのでし
> ょう?

区別されません。ときどきちょっとこまります。

> } (equal ?a 97) => t
> } (equal ?b 98) => t

> (equal 98 98) も t になりますか?

はい、なります。前にも書いたように、equal は何でも比較できます。

-- 
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/