【问题标题】:custom postfix notation, Apply / Function自定义后缀表示法,应用/功能
【发布时间】:2011-07-15 08:39:44
【问题描述】:

我想在 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

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


最好使用Notations 包完成此操作,而不是手动MakeBoxes,以方便设置类似的符号,即使使用Notations更难通过文字交流。

【问题讨论】:

标签: wolfram-mathematica customization notation


【解决方案1】:

您无法使用自己发明的运算符语法(如@@&)来做到这一点。 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!

【讨论】:

  • 是的,这确实有帮助:我不会浪费时间尝试做不可能的事情。这是一个不好的例子,但是如果我对可能通常有用的语法扩展有想法,但不能用 Notations 包实现,我应该写信给谁? (显然 Mathematica 不是开源的,我明白这一点。)
  • 另外,你能解释一下Symbolize做什么和不做什么,因为我原本以为我可以Symbolize@@&
  • 您可以随时通过 support@wolfram.com 的技术支持提交建议
  • @Mr.您还可以使用他们的feedback page 向 WRI 发送建议。
  • 折叠狼操作员被认为是虐待动物。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-07
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多