自定义后缀表示法,应用/功能

时间:2011-03-14 21:34:32

标签: wolfram-mathematica customization notation

我想在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}}更难以通过文字进行交流。

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

我也会包含截图,因为这涉及到符号:

example operator hackery

此方法可能失败的原因是您无法为\[Wolf]之类的任意符号设置运算符优先级。您可以使用我上面链接的无意义运算符之一,但这些运算符也具有无法更改的固定优先级。

如果您在文档中发现PrecedenceForm,您可能会得到一个简短的错误希望,但正如文档所说,它只影响打印而不是评估。

HTH!