我当时玩的是Prefix
和Postfix
运算符(分别为@
和//
),我遇到了以下问题。在Mathematica中使用f @ expr和expr // f的不同结果
考虑下面的代码,他们评估完全相同的方式:
Hold[[email protected]@data] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)
Hold[data // Sort // MatrixPlot] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)
不过,考虑下面的表达式,我得到不同的结果:
[email protected]'[0]
(* Abs'[0] *)
Abs'[0] // FunctionExpand
(* 0 *)
我不太清楚真正为什么这是。在其他几十个代码片段中,[email protected]
,expr // f
和f[expr]
都评估为相同的结果。为什么这一个特例会给出这个结果?
此链接可能是相关的:http://www.mathprogramming-intro.org/book/node174.html,我在这里讨论类似的优先级相关问题。在原始表达式上使用'FullForm'通常会有所帮助。 –
@Leonid'FullForm'是一个更好的方式来看看发生了什么比我建议的;我把这个添加到我的答案中,希望你不介意 – acl
@acl太棒了!当你出来时,我正在使用它来输入答案,所以我放弃了我的,投了你的票,离开了链接。列出这两种方法是很好的。 –