Tellsimp and stack overflow



[Maxima] Tellsimp and stack overflow. Robert Dodier robert.dodier at gmail.com
Tue Jun 22 12:45:37 CDT 2010 
 Previous message: [Maxima] Tellsimp and stack overflow. 
 Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] 
 On Tue, Jun 22, 2010 at 11:04 AM, Grigory Sarnitskiy
<sargrigory at yandex.ru> wrote:

> Imagine I need a function f, such that
>
> f(a*b) = f(g(a) * g(b))
>
> I don't want maxima to evaluate it ad infinitum, only n steps
>
> so if
>
> n = 1 then f(a*b) = f(g(a) * g(b))
> n = 2 then f(a*b) = f(g(g(a)) * g(g(b)))
> n = 3 then f(a*b) = f(g(g(g(a))) * g(g(g(b))))

OK, how about this? Hope it's clear enough.
Bear in mind I didn't think too much about it ....

(%i1) apply_n (f, x, n) := if integerp(n) then block ([fx : apply (f,
[x])], for i thru n - 1 do fx : apply (f, [fx]), fx) else 'apply_n (f,
x, n);
(%o1) apply_n(f, x, n) := if integerp(n)
then block([fx : apply(f, [x])], for i thru n - 1 do fx : apply(f, [fx]), fx)
else 'apply_n(f, x, n)
(%i2) g_n (x) := apply_n (g, x, n);
(%o2) g_n(x) := apply_n(g, x, n)
(%i3) matchdeclare (aa, all);
(%o3) done
(%i4) simp:false;
(%o4) false
(%i5) tellsimpafter (foo("*"(aa)), foo(map (g_n, aa)));
(%o5) [foorule1, false]
(%i6) simp:true;
(%o6) true
(%i7) a*b;
(%o7) a b
(%i8) foo(a*b);
(%o8) foo(apply_n(g, a, n) apply_n(g, b, n))
(%i9) n:3;
(%o9) 3
(%i10) foo(a*b);
(%o10) foo(g(g(g(a))) g(g(g(b))))

best

Robert Dodier

(%i1) F(a,b,n):=block(if n=1 then f(g(a)*g(b)) else F(g(a),g(b),n-1));
(%o1) F(a,b,n):=block(if n=1 then f(g(a)*g(b)) else F(g(a),g(b),n-1))
(%i2) F(a,b,1);
(%o2) f(g(a)*g(b))
(%i3) F(a,b,2);
(%o3) f(g(g(a))*g(g(b)))
(%i4) F(a,b,3);
(%o4) f(g(g(g(a)))*g(g(g(b))))

Aleksas Domarkas
Previous message: [Maxima] Tellsimp and stack overflow. 
 Messages sorted by: [ date ] [ thread ] [ subject ] [ author ] 
 More information about the Maxima mailing list