[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [bep] learning lisp: let
- To: bep@argv.org
- Subject: Re: [bep] learning lisp: let
- From: Reiko TAKAHASHI <HFC03614@nifty.ne.jp> (高橋玲子)
- Date: Sun, 17 Jun 2001 20:39:52 +0900
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
r高橋です。
Reply TAKAHASHI Naoto <ntakahas@...>'s message:
} また、文字 ?a と文字列 "a" は別のものです。後者は「中にaという文字が入っ
} た箱」です。
}
} (equal ?a "a") => nil
}
} 「文字列」の箱の中身を知るには aref という関数を使います。書き方は、
} (aref 文字列 箱番号) です。「箱番号」は最初をゼロ番目と数えます。実際
} の長さより大きい箱番号を指定するとエラーになります。
}
} (equal (aref "abc" 0) ?a) => t
} (equal (aref "abc" 0) ?b) => nil
} (equal (aref "abc" 100) ?x) => エラー
}
} (setq xyz "abc")
} (equal (aref xyz 1) ?b) => t
} (equal (aref xyz 1) ?c) => nil
} (equal (aref xyz 100) ?x) => エラー
私にとっていちばんの謎だったのは、「シンボル」と「文字列」があるのに、
なぜさらに「文字」が必要なんじゃ?ということでした。
でも、いろいろ説明していただいて、なんとなくわかった気がします。
「文字列」というのは、一つずつ文字の入った透明な箱(がつながったもの)の
ようなもので、箱があって初めて、別の箱とつながったり離れたり(もしかした
らほかにもいろいろ)できる。
文字自体ではなく、箱がつながっているからこそ、真ん中の文字だけを他の文字
と入れ替えたり、そういうこともできる……んですね?
「文字」が便利な点としては、たとえば1個の文字を取り出して、それがなんな
のかをチェックしたいような場合、「文字」として扱うとチェックにASCIIコード
が使えたり、比較のときにもなにかと便利だったりするのでしょうか?
(ASCIIコードについては、点字のNABCC等の話で聞いたことがあります。アルフ
ァベットや数字やコントロールコードにふつうの数字が割り当てられているコー
ド体系(?)ですよね?)
} 箱の中身を変更するには aset を使います。
}
} (setq xyz "abc")
} (aset xyz 0 ?p)
} xyz => "pbc"
}
} 箱の長さを自動的に伸ばすことはできません。
}
} (setq xyz "abc")
} (aset xyz 2 ?q)
} xyz => "abq"
} (aset xyz 3 ?e) => エラー
自動的に縮めるのはどうですか?
たとえば、(aref ...)で文字列の中身をチェックして、改行コードだったら削除
する……とかはできるでしょうか?
} さて、一般に計算機の内部では、文字に数値を割り当てて使っています。で、
} 実は Emacs Lisp は少々さぼっていまして、「文字」と「その文字を表す数値」
} を同一視しています。
}
} # XEmacs は「文字」と「数値」を区別します。
}
} 「文字」がアルファベットの場合、「文字を表す数値」はその ASCII コード
} になります。
ただの数字なのか、文字を表した数字なのかは、どうやって区別されるのでし
ょう?
} (equal ?a 97) => t
} (equal ?b 98) => t
(equal 98 98) も t になりますか?
**-***-***-***-***-***-***-***-***-***-***-***-**
Reiko TAKAHASHI (高橋玲子)
E-mail: HFC03614@...
ICQ UIN: 85924121 (Twinkle)
**-***-***-***-***-***-***-***-***-***-***-***-**