2013-11-08 2 views
2

В клене можно упростить выражение, используя самоопределяемые правила, как, например,упростить выражение с заданными правилами, которые являются функциональными отношениями

> simplify(x*y,{x=y+1}) 
y^2+y 

В отличии от того, что мне нужно, это способность передавать правила, которые в функциональная форма, то есть что-то вроде

> wantedcommand(f(a)*f(b), f(x)=g(x+3)) 
g(a+3)*g(b+3) 

знает ли кто, как достичь этого?

ответ

3
applyrule(f(x::anything)= g(x+3), f(a)*f(b)); 
1
ee := f(a)*f(b): 

applyrule(f(x::anything)=g(x+3), ee); 

          g(a + 3) g(b + 3) 

subsindets(ee,specfunc(anything,f),t->g(op(t)+3)); 

          g(a + 3) g(b + 3)