我想在 Mathematica 7 中设置以下自定义符号。
这种表示法本身并不是特别有用,因此请不要建议现有的替代方案,或指出这只会节省一些击键次数。
我想知道是否可以以及如何完成。
目前,可以进入
f = #2 + #^2 / #3 & @@ # & ;
f[ {a, b, c} ]
Out[]= b + a^2 / c
内部函数在哪里#^2 / #3 + #2 &
is Apply
第一个参数。
我想实现语法
f = #2 + #^2 / #3 @@& ;
并让它表现得完全相同。那是,@@&
代表一个Function
它会自动应用于其第一个参数。
它将需要具有与 &
symbol.
最好是通过以下方式完成此操作Notations
尽可能地打包,而不是手动MakeBoxes
,为了便于设置类似的符号,即使使用Notations
通过文字交流更加困难。
你不能用你自己发明的运算符语法来做到这一点(比如@@&
)。 Mathematica 只是没有能力在运行时修改语言语法。
你至少可以做到一半Notation
包,但你必须使用一个在 Mathematica 中没有意义的符号,并且可能大部分都与其中之一一起使用没有内置含义的运算符 http://reference.wolfram.com/mathematica/tutorial/OperatorsWithoutBuiltInMeanings.html,但其中大多数(如果有的话)不会绑定为后缀运算符。
例如,在这里我将使用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 http://reference.wolfram.com/mathematica/ref/PrecedenceForm.html在文档中,您可能会得到一个简短的虚假希望,但正如文档所说,它只影响打印而不影响评估。
HTH!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)