SAD部屋 - Ticket-32 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

This is the <a href="http://oiilsxckl.com">perceft</a> post for me to find at this time! Withによる bindingがおかしい

:Priority:Normal
:Reporter:Akio Morita
:Status:New
:Assigned to:?
:Version:4037
:Milestone:?
:Created:2012-06-13

!! Description

純関数リテラル (With[{foo = #}, foo + 1]&) を With[{foo = 1}, ...]環境で評価すると異なる値(With[{1 = #}, 2&])に展開される

問題の本質と実用上の障害
* Withスコープが局所スコープになっていない
* 純関数内の局所シンボルを安全に保護できない

同様に純関数のSymbolic Slot表現もスコープ保護されていない問題がある
(With[{foo = 1}, Function[{foo}, foo + 1]])

類似のModuleスコープでは、この例の範囲では問題が生じない(ただし、\$Immediate = 1(default)の場合)
(With[{foo = 1}, Module[{foo = #}, foo + 1]])

\$Immediate = 0の場合は、上記のWithスコープと同様の結果となる
(\$Immediate = 1の場合、Module[{foo}, ...]内の fooシンボルが '''maxgeneration'''なシンボルに置換されている)

!! Attachement files
{{attach_map('Ticket-32')}}
{{attach_form('','')}}

!! Changelog
!!!Akio Morita (2012-06-13 (水) 14:56:03)
意味論のモデルにしている MathematicaではWithによるシンボル bindingは局所スコープで行われている

SEE ALSO: http://reference.wolfram.com/mathematica/ref/With.ja.html
!!!Akio Morita (2012-06-13 (水) 15:02:45)
FunctionにおけるPlace Holder シンボルも局所スコープと思われる

SEE ALSO: http://reference.wolfram.com/mathematica/ref/Function.ja.html
!!!Akio Morita (2012-06-13 (水) 16:17:33)
Withが、シンボル置換するスコープをModuleスコープにすると同様の混同が起こる
Print[              With[{foo = 1}, Module[{foo = #}, foo + 1]&] ];
Print[Module[{foo}, With[{foo = 1}, Module[{foo = #}, foo + 1]&]]];

シンボルの世代を調べた限りでは、
第一のケース
With[{foo = 1}, Module[{foo\$maxgeneration = #}, foo\$maxgeneration + 1]&]
第二のケース
Module[{foo\$2}, With[{foo\$2 = 1}, Module[{foo\$2 = #}, foo\$2 + 1]&]]
となっている。内側のModuleスコープのfooシンボルが次の世代(foo$3)になっていないのが問題の本質か?

{{its_edit_ticket_form}}