我當時玩的是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太棒了!當你出來時,我正在使用它來輸入答案,所以我放棄了我的,投了你的票,離開了鏈接。列出這兩種方法是很好的。 –