Ist*_*har 7 syntax wolfram-mathematica operators
我想定义一个表单的新运算符x /==> y,其中运算符/==>被视为例如/@运算符Map,并被转换为MyFunction[x, y].有一个重要的方面:我希望结果运算符像任何两位运算符一样在前端运行,也就是说,两个字符(a Divide和a
DoubleLongRightArrow)应该连接在一起,不应出现语法着色,它们是单击时可以一起选择,因此必须设置优先级.另外,我宁愿避免使用该
Notation`包.结果,我想看到这样的事情:
In[11]:= FullForm[x/\[DoubleLongRightArrow]y]
Out[11]//FullForm= MyFunction[x,y]
Run Code Online (Sandbox Code Playgroud)
有谁知道如何实现这一目标?
该符号包可能是最接近于做这样的事情,而是根据响应我自己的类似性质的问题,你想要的是不幸的是不实际的.
不要让这阻止你尝试,因为你可能会在这个过程中学到新东西.Notation Package及其支持的功能远非无用.
您也可以找到对此问题的回复提供信息.
有许多函数可用于手动实现语法更改.我将引导您访问这些函数的官方页面,而不是尝试编写我自己的帮助文件.阅读完毕后,请询问您的任何重点问题,或者获取实施具体想法的帮助.我或其他人应该能够回答你的问题,告诉你如何做某事,或解释为什么不可能.
文本输入和输出上的索引页面.
更彻底的是,人们可能会使用CellEvaluationFunction哪些可以用来做不寻常的事情.
还有更多,我稍后会尝试扩展此列表.(欢迎其他人编辑此帖子)
感谢 Mr.Wizard 的链接,我在文档中找到了有关如何解析新运算符的唯一示例(低级输入中的 gplus 示例)。根据这个例子,这是我的新运算符的版本PerArrow。请对以下代码发表评论/批评:
In[1]:= PerArrow /: MakeBoxes[PerArrow[x_, y_], StandardForm] :=
RowBox[{MakeBoxes[x, StandardForm],
RowBox[{AdjustmentBox["/", BoxMargins -> -.2],
AdjustmentBox["\[DoubleLongRightArrow]", BoxMargins -> -.1]}],
MakeBoxes[y, StandardForm]}];
MakeExpression[
RowBox[{x_, "/", RowBox[{"\[DoubleLongRightArrow]", y_}]}],
StandardForm] :=
MakeExpression[RowBox[{"PerArrow", "[", x, ",", y, "]"}],
StandardForm];
In[3]:= PerArrow[x, y]
Out[3]= x /\[DoubleLongRightArrow] y
In[4]:= x /\[DoubleLongRightArrow]y
Out[4]= x /\[DoubleLongRightArrow] y
In[5]:= FullForm[x /\[DoubleLongRightArrow]y]
Out[5]//FullForm= \!\(\*
TagBox[
StyleBox[
RowBox[{"PerArrow", "[",
RowBox[{"x", ",", "y"}], "]"}],
ShowSpecialCharacters->False,
ShowStringCharacters->True,
NumberMarks->True],
FullForm]\)
Run Code Online (Sandbox Code Playgroud)
为了清楚起见,这里还提供了一个屏幕截图:

由于运营商尚未完全集成,进一步的担忧是:
DoubleLongRightArrow用y而不是 /)。DoubleLongRightArrow进行RowBox编辑,否则会产生语法错误In[4]和In[5])In[4]如果直接输入,它会打印得很奇怪(注意和处的大间隙In[5])现在,我可以忍受这些,不过如果能有一些方法来解决所有的小问题就好了。我想所有这些基本上都归结为一些更低级别的语法处理程序,它现在不知道如何对新运算符进行分组。关于如何解决这些问题有什么想法吗?我知道Cell有很多可能会派上用场的选项(例如CellEvaluationFunction,ShowAutoStyles和InputAutoReplacements),尽管我在这里再次一无所知。