From: Eduardo O. <edu...@gm...> - 2022-07-09 20:57:02
|
Hi, I need a little more help... This works nicely: foo1 : lambda([a, b], 10*a + b); xreduce(foo1, [2, 3, 4, 5]); xreduce(foo1, [2, 3, 4, 5], 9); foo(a, [b]) := xreduce(foo1, b, a); foo(9, 2, 3, 4, 5); It yields: (%i1) foo1 : lambda([a, b], 10*a + b); (%o1) lambda([a, b], 10 a + b) (%i2) xreduce(foo1, [2, 3, 4, 5]); (%o2) 2345 (%i3) xreduce(foo1, [2, 3, 4, 5], 9); (%o3) 92345 (%i4) foo(a, [b]) := xreduce(foo1, b, a); (%o4) foo(a, [b]) := xreduce(foo1, b, a) (%i5) foo(9, 2, 3, 4, 5); (%o5) 92345 Then I tried to replace foo1 by this: foo1 : lambda([o, action], if equal(action, op) then op(o) elseif equal(action, args) then args(o) else args(o)[action]); I was expecting to get this: foo(a+b*c, op) -> op(a+b*c) foo(a+b*c, args) -> args(a+b*c) foo(a+b*c, 2) -> args(a+b*c)[2] foo(a+b*c, 2, 1) -> args(args(a+b*c)[2])[1] but my foo1 is broken - both foo(a+b*c, op) and foo1(a+b*c, op) return "+", but foo1(a+b*c, args) and foo(a+b*c, 1) both return unevaluated "if ..."s. How do I fix that? How do I force the evaluation of that if? Thanks in advance! Eduardo Ochs http://angg.twu.net/eev-maxima.html |