custom postfix notation, Apply / Function

ε祈祈猫儿з 提交于 2019-12-03 09:35:01

问题


I would like to set up the following custom notation in Mathematica 7.

This notation is not particularly useful in itself, so please do not suggest existing alternatives, or point out that this only saves a few keystrokes.

I want to know if and how it may be done.


At present, one may enter

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

f[ {a, b, c} ]

Out[]= b + a^2 / c

Where the inner function #^2 / #3 + #2 & is Apply'd to the first argument.


I would like to implement the syntax

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

and have it behave exactly the same. That is, @@& to represent a Function that is automatically applied to its first argument.

It will need to have the same binding as the & symbol.


It is preferable that this is done with the Notations package, to whatever extent that is possible, rather than manual MakeBoxes, for the sake of ease in setting up similar notations, even though the use of Notations is more difficult to communicate via text.


回答1:


You can't do this with an operator syntax of your own invention (like @@&). Mathematica just doesn't have the capability to modify the language grammar at runtime like that.

You can get at least partway there with the Notation package, but you have to use a symbol that has no meaning in Mathematica, and possibly most of the way there with one of the operators without built-in meanings, but most (if any) of them don't bind as postfix operators.

Here, for example, I'll use the Notations package to define the \[Wolf] character as an admittedly pseudo-postfix operator in place of @@&:

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

I'll include a screenshot too since this involves notation:

Where this approach may fail is in the fact that you can't set an operator precedence for an arbitrary symbol like \[Wolf]. You can instead use one of the meaningless operators I linked to above, but those also have a fixed precedence that can't be changed.

If you found PrecedenceForm in the documentation you might get a brief false hope, but as the docs say, it only effects printing and not evaluation.

HTH!



来源:https://stackoverflow.com/questions/5304858/custom-postfix-notation-apply-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!