[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: TAKAHASHI Naoto <ntakahas@m17n.org>
- Date: Fri, 27 Apr 2001 11:47:51 +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.103 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)
n高橋です。ちょっと専門的になります。
> ここで、let特有なのかLisp特有なのか分からないのですが、
正確に言えば、ダイナミック・バインディング方式の Lisp 特有、です。
Emacs Lisp はダイナミック・バインディングです。
一方スタティック・バインディングの Lisp、たとえば Common Lisp なんかだ
と変わってきます。スタティック・バインディングで次のようにすると、
(defun test () (print x)) ; 関数定義
(setq x 1) ; グローバル変数xに値を設定
(let ((x 2))
(test)) ; ローカル変数xに別の値を束縛して関数testを実行
print されるのは2ではなく、1になります。同じことを UTILISP のようなダ
イナミック・バインディングの Lisp でやると、Emacs Lisp の場合と同様、2
が print されます。
> write-file-in-sjisの例では、中で呼び出されるwrite-fileからは、あたかもグ
> ローバルにcoding-system-for-writeの値が変更されているかのように見えてい
> る(はず)ということです。
Emacs Lisp の場合はそのとおりです。
> 本当にcoding-system-for-writeのグローバルな値が変更されているのか、そ
> の辺をよく分かってないので、間違っていたり理解に問題がある場合は指摘し
> ていただけると助かります。
というわけで、合ってます。
--
TAKAHASHI Naoto
ntakahas@...
http://www.m17n.org/ntakahas/