Пользовательская постфиксная нотация, Применить/Функция

Я хотел бы настроить следующие пользовательские нотации в 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 сложнее общаться через текст.

Ответ 1

Вы не можете сделать это с помощью синтаксиса оператора вашего собственного изобретения (например, @@&). 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

Я включу скриншот, так как это включает в себя обозначение:

example operator hackery

Если этот подход может завершиться неудачно, то вы не можете установить приоритет оператора для произвольного символа, такого как \[Wolf]. Вместо этого вы можете использовать один из бессмысленных операторов, с которыми я связан выше, но у них также есть фиксированный приоритет, который нельзя изменить.

Если вы нашли PrecedenceForm в документации, вы можете получить краткую ложную надежду, но, как говорят документы, это только влияет на печать и не оценка.

НТН!