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));