2013-04-27 3 views
1

Я пытаюсь реализовать свою собственную версию функции Coefficient в Mathematica для учебных целей. Это то, что я написал до сих пор:Извлечение соответствующего объекта из MatchQ

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 но возвращает литерал «а» вместо этого.

Как я могу обратиться к совпадению MatchQ?

+2

Если вы изучаете Mathematica, я бы порекомендовал http://mathematica.stackexchange.com вместо этого сайта –

+1

Я второй, что движение. Подавляющее большинство экспертов математики переехали туда. Пара все еще преследует stackoverflow, но они очень редки. – rcollyer

+0

спасибо за совет – blue

ответ

0

Путь я нашел, чтобы решить эту проблему, чтобы использовать правило подстановки внутри If заявления, как это:

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

способ сделать вид, что вы хотите использовать что-то вроде

If[ Length[matchedparts = Cases[ expr , pattern :> result]]>0 , use(matchedparts), do something else ] 
Смежные вопросы