sync notes(auto)
This commit is contained in:
parent
0d4aa4f6cd
commit
d7e1b16590
1 changed files with 3 additions and 3 deletions
|
@ -47,7 +47,7 @@ int main(void)
|
|||
|
||||
レキシカルスコープの言語では、変数名とその参照先は一意に決まる。実行された状況などに左右されない。ここでいう一意というのは、「同じ名前の変数が色々定義されてた場合、そのうちのどれ?」というのが(つまり、環境フレームが)一意という意味であって、その中身は実行された状況に左右されない、というわけではない。
|
||||
|
||||
ダイナミックスコープの言語では、変数の値がどうなっているかは、実行された状況に左右される(だからダイナミックスコープという)。
|
||||
ダイナミックスコープの言語では、変数名で何を参照するかが、実行された状況に左右される(だからダイナミックスコープという)。
|
||||
|
||||
例えば、下記を実行したら、ダイナミックスコープの場合は`2`が表示される。実際は0だけど。
|
||||
```c
|
||||
|
@ -82,9 +82,9 @@ int main(void)
|
|||
## 経緯とかお気持ちとか
|
||||
そもそもはレキシカルスコープにしたかったが、初期のLISPではダイナミックスコープになってしまったらしい。じゃあその頃、他の言語はどうだったんだ、とか、別途気になる。
|
||||
|
||||
レキシカルスコープがいかに重要なのか?とか、どうやったらそれが実現できるのか?をレキシカルスコープなschemeを作った人が書いたSICPが詳細に説明しているのは、そういう理由からかもしれない(根拠なし)。cf. [評価の環境モデル(SICP)](https://sicp.iijlab.net/fulltext/x320.html)
|
||||
レキシカルスコープがいかに重要なのか?とか、どうやったらそれが実現できるのか?をレキシカルスコープなlispことschemeを作った人が書いたSICPが、やたら詳細に説明しているのは、そういう理由からかもしれない(根拠なし)。cf. [評価の環境モデル(SICP)](https://sicp.iijlab.net/fulltext/x320.html)
|
||||
|
||||
ちなみにレキシカルスコープのインタプリタを実装しようとすると、関数呼び出しのとき、別の関数を呼ぶ場合、呼び出し元で定義したローカル変数のかたまり(フレーム)を一旦無効にしてから関数を呼び出す必要があり、関数から戻って来た時にフレームを再度有効にする必要がある。この用途のため、フレーム保存しておく必要があるが、再帰呼び出しなどの時、(末尾再帰でないなら)毎回そのフレームを保存しておく必要があり、メモリ消費量が多くなる。というような、「ダイナミックスコープになった経緯」みたいな話をネットでチョイチョイ見るが、単純にフレームの保存をしていないという、現代の視点から見るとバグっぽい挙動に見えてしまう。
|
||||
ちなみにレキシカルスコープのインタプリタを実装しようとすると、関数呼び出しのとき、別の関数を呼ぶ場合、呼び出し元で定義したローカル変数のかたまり(フレーム)を一旦無効にしてから関数を呼び出す必要があり、関数から戻って来た時にフレームを再度有効にする必要がある。この用途のため、フレーム保存しておく必要があるが、再帰呼び出しなどの時、(末尾再帰でないなら)毎回そのフレームを保存しておく必要があり、メモリ消費量が多くなる。まあ実際そうなんだけど、このような、「ダイナミックスコープになった経緯」みたいな話をネットでチョイチョイ見るが、単純にフレームの保存をしていないという、現代の視点から見るとバグっぽい挙動に見えてしまう。
|
||||
|
||||
|
||||
### Refs.
|
||||
|
|
Loading…
Reference in a new issue