从大表达式中提取与模式匹配的表达式

Guy*_*Ari 9 wolfram-mathematica

我有一个Mathematica表达式,包含一个方形根,示意图

expr = a / (b + Sqrt[c]);
Run Code Online (Sandbox Code Playgroud)

其中a,b,c大表达式.我想在sqrt下提取表达式,例如通过匹配模式,例如

Match[expr,Sqrt[x_]] // should return c
Run Code Online (Sandbox Code Playgroud)

是否有捷径可寻?

Mr.*_*ard 12

从理论上讲,这应该正常工作:

extractSqrt = Cases[ToBoxes@#, SqrtBox@x_ :> ToExpression@x, Infinity] &;

extractSqrt[expr]
Run Code Online (Sandbox Code Playgroud)


WRe*_*ach 5

如果您愿意将作业更改为expr,则可以执行以下操作:

expr = Hold[a / (b + Sqrt[c])];

Cases[expr, HoldPattern @ Sqrt[x_] :> x, Infinity]
Run Code Online (Sandbox Code Playgroud)

Hold从施加任何的简化表达式在赋值语句中防止的Mathematica.在这种情况下,Sqrt[c]将"简化"变为Power[c,Rational[1,2]].

HoldPattern是在必要的Cases表达,以防止相同的简化的发生到图案相匹配.