SAD部屋 - Ticket-18 Diff

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

! "[]"

:Priority:Normal
:Reporter:AC
:Status:New:Status:Closed
:Assigned to:?
:Version:
:Milestone:?
:Created:2008-07-19

!! Description

マニュアルにはリストの要素取り出しは f'''[''''''['''n''']'''''']'''で行うと書いて
ありますが、実際にはf'''['''n''']'''でも取り出せてしまいます。

  In[1] := data={ {1,2},{3,4} }
Out[1] := { {1,2},{3,4} }
  In[2]  := data[1,2]
Out[2] := 2

OSはLinuxを使用しています。
SAD version: 1.0.10.2.3b3

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

!! Changelog
!!!AC (2008-07-22 (火) 13:14:26)
"'''[''''''[''''''[]'''''']'''''']'''"でも要素は取り出せましたが、"'''[''''''[''''''[''''''[]'''''']'''''']'''''']'''"ではFFS-Errorとなりました。
!!!Akio Morita (2008-07-22 (火) 16:47:50)
それは文書化されていない仕様です。
現実的には、後述の UpSet/UpSetDelayed絡みの弊害の方が
深刻なのですが,すでに Listオブジェクトへの要素アクセスに
この構文糖を使っているコード資産があるために廃止は不可能です。
(oide氏も、悪い文法的だが、すでに使われているので廃止できないと
言っていました)

symbol[foo___]は、symbolが List型のオブジェクトに拘束されているとき
暗黙のうちに Part[symbol, foo]に展開されます。
従って、同一のシンボルに List型オブジェクトとハッシュど同時に
拘束できません

個人的には、美しく無いし (symbol[foo] = val_)への UpSetが
不可能になる(正確には、Part[symbol, foo] = val_へ UpSetできない)ので、
悪い文法だと思う。
!!!Akio Morita (2008-07-25 (金) 17:50:12)
foo'''[''''''[''''''[''''''['''bar''']'''''']'''''']'''''']'''がエラーになるのは妥当です。
正しくは、Part[Null, bar]の評価時に '''Null'''は原子(Atom)なので
Part関数で下部構造を取り出せないためです。

なぜ、Part[Null, bar]が評価に現れるかは次の構文規則によって
説明できます。
'''['''演算子と'''[''''''['''演算子は、同順位の左結合演算子ですが、
字句解析上は'''[''''''['''トークンが'''['''トークンより高い優先順位を
持つので、左端から構文解析が進行する際に'''['''の並びは
'''[''''''['''演算子へ優先的に解釈されます。
さらに、構文規則上で'''式'''が必要な場所に'''式'''が
存在しない場合、暗黙のうちに'''Null'''が記述されたと
見なす補完規則があります。
したがって、次のような変換が適用されます。

foo[bar] -> foo[bar]
foo[[bar]] -> Part[foo, bar]
foo[[[bar]]] -> Part[foo, [bar]] -> Part[foo, Null[bar]] -> Part[foo, bar]
foo[[[[bar]]]] -> Part[foo, [[bar]]] -> Part[foo, Null[[bar]]] -> Part[foo, Part[Null, bar]]
!!!Akio Morita (2009-07-13 (月) 11:32:46)
現行のSAD仕様なので、Ticket Close


{{its_edit_ticket_form}}//{{its_edit_ticket_form}}