Different results using f@expr and expr // f in Mathematica -
Different results using f@expr and expr // f in Mathematica -
i playing around prefix
, postfix
operators (@
, //
respectively) , ran next issue.
given next code, evaluate in same exact way:
hold[matrixplot@sort@data] // fullform (* hold[matrixplot[sort[data]]] *) hold[data // sort // matrixplot] // fullform (* hold[matrixplot[sort[data]]] *)
however, given next expressions, different results:
functionexpand@abs'[0] (* abs'[0] *) abs'[0] // functionexpand (* 0 *)
i'm not quite sure why is. in dozens of other snippets of code i've had, f@expr
, expr // f
, , f[expr]
evaluate same result. why 1 particular case give result?
this precedence issue. @ has higher precedence //. see going on, place cursor on functionexpand
in both cases, either cmd+. (on os x) or ctrl+. on else, , end selecting things precedence.
another way see utilize trace
:
functionexpand@abs'[0] // trace (* -> {{{functionexpand[abs],abs},abs^\[prime]},(abs^\[prime])[0]} *)
while
abs'[0] // functionexpand//trace (* -> {functionexpand[(abs^\[prime])[0]],0} *)
in particular, notice how in first case mma first evaluates functionexpand[abs]
, obtaining abs
, continuing. exactly due how @
binds compared //
.
edit: inspired @leonid's comment, informative:
hold[functionexpand@abs'[0]] // fullform hold[abs'[0] // functionexpand] // fullform (* -> hold[derivative[1][functionexpand[abs]][0]] hold[functionexpand[derivative[1][abs][0]]] *)
which much improve demonstration of going on.
wolfram-mathematica
Comments
Post a Comment