1.13 pattern example 8

Write pattern to change f(a^b) to p(a^b,b)

In Maple

restart; 
expr:=f(a^b); 
 
if patmatch(expr,f( (a::anything)^b::anything ),'la') then 
   print(la); 
   p( eval(a,la)^eval(b,la) , eval(b,la) ); 
else 
   expr; 
fi; 
 
 
     p(a^b, b)
 

In Mathematica

f[a^b] /. f[x : _^n_] -> p[x, n] 
 
     p[a^b,b]