[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
char, string, etc.
- To: bep@argv.org
- Subject: char, string, etc.
- From: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Mon, 18 Jun 2001 13:17:30 +0900 (JST)
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
- User-Agent: SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.2 Emacs/21.0.104 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
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/