10

我想在 Mathematica 7 中设置以下自定义符号。

这个符号本身并不是特别有用,所以请不要建议现有的替代方案,或者指出这只会节省一些击键。

我想知道它是否以及如何完成。


目前可以进入

f = #2 + #^2 / #3 & @@ # & ;

f[ {a, b, c} ]

Out[]= b + a^2 / c

其中内部函数#^2 / #3 + #2 &Apply'd 到第一个参数。


我想实现语法

f = #2 + #^2 / #3 @@& ;

并让它的行为完全相同。也就是说,@@&表示Function自动应用于其第一个参数的 a。

它需要与 & 符号具有相同的绑定。


为了便于设置类似的符号,最好在可能的范围内使用包完成此操作Notations,而不是手动MakeBoxes完成,即使使用Notations通过文本进行交流更困难。

4

1 回答 1

9

您无法使用自己发明的运算符语法(如@@&)来做到这一点。Mathematica 只是没有像这样在运行时修改语言语法的能力。

您至少可以使用Notation包中的一部分,但是您必须使用在 Mathematica 中没有意义的符号,并且可能在大多数情况下使用没有内置含义的运算符之一,但大多数(如果有的话)它们不绑定为后缀运算符。

例如,在这里,我将使用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在文档中发现您可能会得到一个简短的错误希望,但正如文档所说,它只影响打印而不影响评估。

于 2011-03-14T22:42:44.993 回答