Conference Room SAD
[thread display] [new arrival display] [word search] [past log] [管理用]

Subject Re^3: Withの束縛の取扱いがおかしい
Date: 2012/07/20(Fri) 11:22:51
ContributorAkio Morita

> この問題は、Functionも含めてk64-1-6で対応が試みられています。
>
> With[{a=2}, With[{a=3}, ...]]
>
> のように、Withのlocal symbolがかぶる場合、内側のsymbolが優先します。ただし、
>
> With[{a=2}, With[{a}, ...]]
>
> のように、内側のsymbolの値を与えない場合は、内側のsymbol aを外側のWithの置換対象にしています。要議論です。
>
> Functionの場合は常に内側が優先します。
>
With[{a = 2}, With[{a}, ...]]の解釈ですが、
With[{a}. ...]は、式(...)中の aを aの評価値(つまり、当該With環境の外で aに拘束された値)と置換するので、
冗長な記述をすると With[{a = a}, ...]に等価になると思います

したがって、シンボルスコープを含めて書き下すと
With[{a = 2}, With[{a}, ...]] -> With[{a$1 = 2}, With[{a$2 = a$1}, ....]]
となるべきだと思います

同じようなスコープ解決問題として、With[{a = 3}, With[{a = a + 2}, a]]の評価値は
(2+a)ではなく 5を返すべきだと思います
2012-07-20 11:18 checkoutのソースだと (2+a)を返します

スコープ解決
With[{a = 3}, With[{a = a + 2}, a]]
-> With[{a$1 = 3}, With[{a$2 = a$1 + 2}, a$2]]


- 関連一覧ツリー (Click ▼ to display all articles in a thread.)