[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: let (was: Re: インフォについて)
- To: bep@argv.org
- Subject: Re: let (was: Re: インフォについて)
- From: Koichi INOUE <inoue@argv.org>
- Date: 27 Apr 2001 11:17:42 +0900
- Delivered-To: mailing list bep@argv.org
- Mailing-List: contact bep-help@argv.org; run by ezmlm
- Organization: Accessibility Research Group for the Visually Impaired(ARGV)
- User-Agent: T-gnus/6.15.0 (based on Oort Gnus v0.01) (revision 09) SEMI/1.14.3 (Ushinoya) FLIM/1.14.2 (Yagi-Nishiguchi) APEL/10.3 Emacs/21.0.100 (i386-windy-freebsd4.2) MULE/5.0 (SAKAKI)
井上です。
昨夜遅くに書きかけたのですが、うまく書けなくて・・・
TAKAHASHI Naoto <ntakahas@...> writes:
> let はローカル変数が使える progn だと思って下さい。
> (let ((x 1) (y 2) (z 3)) なんたらかんたら)
> は、xに1を、yに2を、zに3を割り当てた状態で「なんたらかんたら」を実行し
> ます。setq と違うのは、let が終了すると、これらローカル変数の割り当て
> は、「なかったこと」にされてしまう点です。write-file-in-sjis の例だと、
> この関数を実行している間だけ coding-system-for-write の値が sjis にな
> ります。write-file-in-sjis の実行が終わると、coding-system-for-write
> は実行以前の値に戻ります。
ここで、let特有なのかLisp特有なのか分からないのですが、
write-file-in-sjisの例では、中で呼び出されるwrite-fileからは、あたかもグ
ローバルにcoding-system-for-writeの値が変更されているかのように見えてい
る(はず)ということです。
Cだと、他の関数Aの中で関数Bを呼び出すとき、Bに対して引数として渡さない限
り、BがAのローカル変数に影響されることはないと思います。
つまり、Cで同様のことをするとしたら、
write-file-in-sjisの中では、まずグローバル変数coding-system-for-writeの
値をバックアップし、その値をsjis-dosに変えて、
その後にwrite-fileを実行し(write-file中ではグローバル変数の
coding-system-for-writeが参照される?)
終わったらcoding-system-for-writeの値をバックアップしてあった値に戻して
終了
という感じになるのだと思います。
でも、letではグローバル変数が定義されているかどうかに関わらずletの中出だ
け通用するローカル変数を新しくつくることもできます。
本当にcoding-system-for-writeのグローバルな値が変更されているのか、そ
の辺をよく分かってないので、間違っていたり理解に問題がある場合は指摘し
ていただけると助かります。
この辺の話もEmacs Lispのマニュアルに詳しく書いてあった気がします。
--
Koichi Inoue, ARGV
E-Mail: inoue@...
ICQ UIN: 74900690
- Follow-Ups:
- Re: let
- From: Mitsugu SAKAMOTO <mitsugu@...>