我想在Mathematica 7中设置以下自定义表示法。
这种表示法本身并不特别有用,所以请不要提出现有的替代方案,或者指出这只能节省一些按键。
我想知道是否以及如何做到这一点。
目前,可以进入
f = #2 + #^2 / #3 & @@ # & ;
f[ {a, b, c} ]
Out[]= b + a^2 / c
第一个参数的内部函数#^2 / #3 + #2 &
为Apply
。
我想实现语法
f = #2 + #^2 / #3 @@& ;
并使其表现完全相同。也就是说,@@&
表示自动应用于其第一个参数的Function
。
它需要与 &
符号具有相同的绑定。
最好使用Notations
包来完成,尽可能使用MakeBoxes
包,而不是手动Notations
,以便于设置相似的符号,即使使用{{1}}更难以通过文字进行交流。
答案 0 :(得分:9)
您不能使用自己的发明的运算符语法(如@@&
)来执行此操作。 Mathematica没有能力在运行时修改语法语法。
你可以使用Notation
包至少在那里获得,但你必须在Mathematica中使用一个没有意义的符号,并且可能大部分使用operators without built-in meanings之一,但是大多数(如果有的话)都没有绑定为后缀运算符。
例如,在这里,我将使用Notations
包将\[Wolf]
字符定义为一个公认的伪后缀运算符,而不是@@&
:
In[1]:= Needs["Notation`"]
In[2]:= Notation[x_ \[Wolf] \[DoubleLongLeftRightArrow] (x_ @@ # &)]
In[3]:= f=#2+#^2/#3& \[Wolf]
Out[3]= (#2+#1^2/#3&) \[Wolf]
In[4]:= f[{a,b,c}]
Out[4]= b+a^2/c
我也会包含截图,因为这涉及到符号:
此方法可能失败的原因是您无法为\[Wolf]
之类的任意符号设置运算符优先级。您可以使用我上面链接的无意义运算符之一,但这些运算符也具有无法更改的固定优先级。
如果您在文档中发现PrecedenceForm
,您可能会得到一个简短的错误希望,但正如文档所说,它只影响打印而不是评估。
HTH!