订阅变量

Max*_*Max 10 wolfram-mathematica

有没有办法迫使Mathematica独立于其未订阅的对应物处理下标变量?进一步来说.说,我有以下定义:

Subscript[b, 1] = {{1, 2}}
Subscript[b, 2] = {{3, 4}}
b = Join[Subscript[b, 1], Subscript[b, 2]]
Run Code Online (Sandbox Code Playgroud)

现在我用的时候

Subscript[b, 1] 
Run Code Online (Sandbox Code Playgroud)

Mathematica将替换它

Subscript[{{1, 2}, {3, 4}},1]
Run Code Online (Sandbox Code Playgroud)

当我希望这些是三个独立的值时,所以改变b不会影响下标[b,..].可能吗?

Sim*_*mon 13

在回答之前的SO问题,Mathematica Notation和语法模型时,telefunkenvf14提到他是

希望使用Notations强制MMA将下标变量视为符号

这基本上就是这个问题的内容.

WReach指出Notation包可以非常简单地使用Symbolize

Needs["Notation`"];
Symbolize[ParsedBoxWrapper[SubscriptBox["_", "_"]]]
Run Code Online (Sandbox Code Playgroud)

哪里(如丹尼尔的回答)不要太担心Box上面的结构,因为你可以使用Notation调色板更简单地输入这些东西.

检查一切是否按预期工作:

In[3]:= Subscript[a, b]//Head
        a = 1
        Subscript[a, b]

Out[3]= Symbol
Out[4]= 1
Out[5]= Subscript[a, b]
Run Code Online (Sandbox Code Playgroud)

In[6]:= Subscript[b, 1] = {{1, 2}}
        Subscript[b, 2] = {{3, 4}}
        b = Join[Subscript[b, 1], Subscript[b, 2]]
Out[6]= {{1, 2}}
Out[7]= {{3, 4}}
Out[8]= {{1, 2}, {3, 4}}
Run Code Online (Sandbox Code Playgroud)

注意:以上所有代码都已复制为输入文本,因此排版SubscriptBox已转换为输入形式Subscript.但是,Symbolize在盒级别的工作,所以测试需要转换回他们的2d形式.为此,请选择代码(或单元格)并使用菜单或快捷方式将其转换为标准形式.具有上述所有代码的笔记本应该是这样的 Cell Ctrl-Shift-N截图