expr_to_seq:=proc(expr::anything) expr_to_seq_aux([],expr) end: # expr_to_seq expr_to_seq_aux:=proc(path,expr) local i,n; if type(expr,{name,integer}) then [path,expr] else n:=nops(expr); [path,op(0,expr)], seq(expr_to_seq_aux([op(path),i],op(i,expr)),i=1..n) fi end: # expr_to_seq_aux maple_to_lisp:=proc(expr::anything) local i; if type(expr,{name,integer}) then expr else [op(0,expr),seq(maple_to_lisp(op(i,expr)),i=1..nops(expr))] fi end: # maple_to_lisp better_maple_to_lisp:=proc(expr::anything) local i; if [args]=[] then better_maple_to_lisp(convert('NULL',string)) elif type(expr,{name,integer}) then expr else [op(0,expr), seq(better_maple_to_lisp(op(i,expr)), i=1..nops(expr))] fi end: # better_maple_to_lisp B:=array(1..2,1..2,[[a,b],[c,d]]); expr_to_seq(eval(B)); maple_to_lisp(eval(B)); better_maple_to_lisp(eval(B)); f:=proc(x) x+1 end: expr_to_seq(f); expr_to_seq(eval(f)); maple_to_lisp(eval(f)); better_maple_to_lisp(eval(f)); g:=proc(n::posint) option remember; if n=0 then 1 else n*g(n-1) fi end: # g expr_to_seq(eval(g)); maple_to_lisp(eval(g)); better_maple_to_lisp(eval(g)); h:=proc(L::list(numeric)) local i; global x; option remember; description `exemple`; map(proc(z) z+x end,L) end: # h expr_to_seq(eval(h)); better_maple_to_lisp(eval(h));