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

Re: let (was: Re: インフォについて)



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/