Estaba jugando con los operadores Prefix
y Postfix
(@
y //
respectivamente) y me encontré con el siguiente problema.Diferentes resultados usando f @ expr y expr // f en Mathematica
Dado el siguiente código, que evalúan de la misma manera exacta:
Hold[[email protected]@data] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)
Hold[data // Sort // MatrixPlot] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)
Sin embargo, teniendo en cuenta las siguientes expresiones, consigo resultados diferentes:
[email protected]'[0]
(* Abs'[0] *)
Abs'[0] // FunctionExpand
(* 0 *)
No estoy muy seguro de verdad por qué es esto En docenas de otros fragmentos de código que he tenido, [email protected]
, expr // f
y f[expr]
todos evalúan el mismo resultado. ¿Por qué este caso particular da este resultado?
Este enlace es posiblemente relevante: http://www.mathprogramming-intro.org/book/node174.html, donde analizo cuestiones similares relacionadas con la precedencia. Usar 'FullForm' en la expresión original a menudo ayuda. –
@Leonid 'FullForm' es una forma mucho mejor de ver lo que sucede que lo que sugerí; Agregué esto a mi respuesta, espero que no te importe – acl
@acl ¡Genial! Estaba escribiendo la respuesta que usaba cuando saliste, así que descarté la mía, voté por la tuya y dejé el enlace. Es bueno tener ambos enfoques en la lista. –