从MatchQ中提取匹配对象

时间:2013-04-27 11:10:21

标签: wolfram-mathematica

我正在尝试在Mathematica中实现我自己的Coefficient函数版本,用于学习目的。这是我到目前为止写的:

myCoefficient[fun_,var_,pow_] := Module[ {f,coeff},
    f[var] = Expand[fun];

    Map[ If[ MatchQ[#, a_ Power[var,pow] ], coeff=a] &, f[var]];
    Map[ If[ MatchQ[#, Power[var,pow] ], coeff=1] &, f[var]];

    Return[coeff];
]

我的问题是If[ MatchQ[#, a_ Power[var,pow] ], coeff=a]没有返回a_匹配MatchQ内的匹配项,而是返回文字“a”。

我如何参考MatchQ匹配的内容?

2 个答案:

答案 0 :(得分:0)

我找到解决此问题的方法是在If语句中使用替换规则,如下所示:

Map[ If[ MatchQ[ #, a_. Power[var,pow] ], coeff = (# /. b_. Power[var,pow] -> b);] &, myexpr];

答案 1 :(得分:0)

一种做你想要的事情的方法是使用像

这样的东西
If[ Length[matchedparts = Cases[ expr , pattern :> result]]>0 , use(matchedparts), do something else ]