Maybe some of what you need can be done with subst:
(%i4) subst('pow,"^", x^7);
(%o4) pow(x,7)
(%i5) subst('pow,"^", a^(b+c));
(%o5) pow(a,c+b)
The other way (two steps):
(#1) Type your lambda form into Maxima and print it with ?print:
(%i1) lambda([xx],
if mapatom(xx) or op(xx) # "^" then xx
else pow(args(xx)[1], args(xx)[2]))$
(%i2) ?print(%);
((LAMBDA SIMP) ((MLIST) $XX)
((MCOND) ((MOR) (($MAPATOM) $XX) ((MNOTEQUAL) (($OP) $XX) "^")) $XX T
(($POW) ((MQAPPLY ARRAY) (($ARGS) $XX) 1)
((MQAPPLY ARRAY) (($ARGS) $XX) 2))))
(%o2) lambda([xx],if mapatom(xx) or op(xx)#^ then xx else
pow((args(xx))[1],(args(xx))[2]))
(#2) Test it
(%i3) to_lisp();
Type (to-maxima) to restart, ($quit) to quit Maxima.
MAXIMA> (setf f `((LAMBDA SIMP) ((MLIST) $XX) ((MCOND) ((MOR) (($MAPATOM)
$XX) ((MNOTEQUAL)
(($OP) $XX) "^")) $XX T (($POW) ((MQAPPLY ARRAY) (($ARGS) $XX) 1)
((MQAPPLY ARRAY)
(($ARGS) $XX) 2)))) ))
((LAMBDA SIMP) ((MLIST) $XX)
((MCOND) ((MOR) (($MAPATOM) $XX) ((MNOTEQUAL) (($OP) $XX) "^")) $XX T
(($POW) ((MQAPPLY ARRAY) (($ARGS) $XX) 1)
((MQAPPLY ARRAY) (($ARGS) $XX) 2))))
MAXIMA> (mfuncall '$scanmap f 'a)
A
MAXIMA> (mfuncall '$scanmap f `((mplus) a b))
((MPLUS SIMP) A B)
MAXIMA> (mfuncall '$scanmap f `((mtimes) a a a))
(($POW SIMP) A 3)
Or something like that...
Barton
-----maxima-bounces at math.utexas.edu wrote: -----
>To: maxima at math.utexas.edu
>From: "Daniel Cabrini Hauagge" <daniel.hauagge at gmail.com>
>Sent by: maxima-bounces at math.utexas.edu
>Date: 02/12/2008 02:12PM
>Subject: Help calling maxima functions from lisp
>
>Hello,
>
>I'm trying to adapt f90.lisp to print out C code. I think that I got
>the easiest parts done already but I'm
>stuck trying to call scanmap from lisp. I've tried to do it like this
>
>(setq l (mfuncall '$scanmap (mfuncal '$lambda [x] x) l))
>
>and
>
>(setq l ($scanmap ($lambda [x] x) l))
>
>and got these errors
>
>EVAL: undefined function MFUNCAL
>EVAL: undefined function $SCANMAP
>
>What I'm trying to do is get this into lisp
>
> exp_trans: scanmap(lambda([xx],
> if mapatom(xx) or op(xx) # "^" then xx
> else pow(args(xx)[1], args(xx)[2])), exp);
>
>I searched the source code to see if there are any examples of such
>call but couldn't find any. If anybody knows
>how to do this or has suggestions for better ways of doing please let me
>know.
>
>--
>Daniel Cabrini Hauagge
>
>email: daniel.hauagge at gmail.com
>cel: +55 (19) 8194-8480
>_______________________________________________
>Maxima mailing list
>Maxima at math.utexas.edu
>http://www.math.utexas.edu/mailman/listinfo/maxima