gpt4 book ai didi

wolfram-mathematica - 在 Mathematica 中使用 f@expr 和 expr//f 的不同结果

转载 作者:行者123 更新时间:2023-12-04 08:01:39 25 4
gpt4 key购买 nike

我在玩PrefixPostfix运算符(分别为 @//),我遇到了以下问题。

给定以下代码,它们以相同的方式进行评估:

Hold[MatrixPlot@Sort@data] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)

Hold[data // Sort // MatrixPlot] // FullForm
(* Hold[MatrixPlot[Sort[data]]] *)

但是,给定以下表达式,我得到不同的结果:
FunctionExpand@Abs'[0]
(* Abs'[0] *)

Abs'[0] // FunctionExpand
(* 0 *)

我不太确定这是为什么。在我拥有的许多其他代码片段中, f@expr , expr // f , 和 f[expr]都评估到相同的结果。为什么这个特殊情况会给出这个结果?

最佳答案

这是一个优先问题。 @ 的优先级高于//。要查看发生了什么,请将光标放在 FunctionExpand在这两种情况下,然后是 cmd+. (在 OS X 上)或 ctrl+。在其他任何事情上,您最终都会按优先级选择事物。

另一种查看方式是使用 Trace :

FunctionExpand@Abs'[0] // Trace
(*
-> {{{FunctionExpand[Abs],Abs},Abs^\[Prime]},(Abs^\[Prime])[0]}
*)

尽管
Abs'[0] // FunctionExpand//Trace
(*
-> {FunctionExpand[(Abs^\[Prime])[0]],0}
*)

特别要注意在第一种情况下 mma 如何首先评估 FunctionExpand[Abs] , 获得 Abs ,然后继续。这正是由于 @ 的强烈程度。与 // 相比绑定(bind).

编辑:受@Leonid 评论的启发,这也提供了丰富的信息:
Hold[FunctionExpand@Abs'[0]] // FullForm
Hold[Abs'[0] // FunctionExpand] // FullForm
(*
-> Hold[Derivative[1][FunctionExpand[Abs]][0]]
Hold[FunctionExpand[Derivative[1][Abs][0]]]
*)

这是对正在发生的事情的一个更好的演示。

关于wolfram-mathematica - 在 Mathematica 中使用 f@expr 和 expr//f 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6708591/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com