2011/05/23

何が何を束縛するって?

「変数(シンボル)が値を束縛する」のか「値が変数(シンボル)を束縛する」のかわからなくなる時ありませんか。私はよく混乱します。正確にはどっちだったっけ?と。

そういえばよくあることなんだけど、こないだもLispの「束縛」の厳密な言い回しについて混乱した。「シンボルが値を束縛する」んじゃなくて「値がシンボルを束縛する」で良いんだよな。
そこで、教えてもらったのが実にわかりやすかったのでここにメモっておきます。
@valvallow 自分もよく混乱します。 unbound variable と言うのだから束縛されるのは変数(シンボル)と覚えるとよい、と聞いてから大分混乱しなくなりました

あと、以前見かけたこれも。
203 : デフォルトの名無しさん : 2010/10/13(水) 18:56:05
(define a 1234)

では、正しいのはどれ?

(1)「aが1234を束縛している」
(2)「1234がaに束縛されている」
(3)「1234がaを束縛している」
(4)「aが1234に束縛されている」

(1)(2)が正しいように思い込んでる。
207 : デフォルトの名無しさん : 2010/10/13(水) 20:05:19
>>203
束縛が作られてもオブジェクト (値) の側は他の束縛を作ることもできるのに対し、
変数にとってはその束縛が唯一無二のものだってことを意識すると
「オブジェクトが変数を束縛している」ってことに納得できる。

R5RS だと 3.1 あたりに記述があるね。
「誤用しがちだけど、別に大して混乱もしないよ」ってことも書いてあるからぶっちゃけ気にしないで問題ないと思う。

せっかくなのでR5RSの3.1からも。
識別子は,構文の型の名前に,または値を格納できる場所の名前になり得る。構文の型の名前になっている識別子は,構文キーワード (syntactic keyword ) と呼ばれ,その構文に束縛 (bound ) されていると言われる。場所の名前になっている識別子は,変数 (variable) と呼ばれ,その場所に束縛されていると言われる。

ついでにこれ良いですね。

計算機プログラムの構造と解釈

0 件のコメント:

コメントを投稿