%define(test,a,b,c,%<a=x>a = %a)\
%<a=y>\
"y" = "%a"
"a = x" = "%test(z,1,2)"
"y" = "%a"
"a = x" = "%locals(a,%<a=x>a = %a)"
"y" = "%a"
\
%define(fak,x,%if(%[%x==1],1,%[%x*%fak(%[%x-1])]))\
%define(nfak,x,%if(%[x==1],1,%[x*%fak(%[x-1])]))\
"720" = "%fak(%fak(3))"
"720" = "%nfak(%nfak(3))"

---

%define(fib,x,%if(%bound(fib_%x),%{%%fib_%x},%<fib_%x=%[%fib(%[x-1])+%fib(%[x-2])]>%{%%fib_%x}))\
#define fib_1               1
#define fib_2               1
"832040" = "%fib(30)"
%for(i,1,30,fib%'('%i%')' = %fib(%i)%'\n')\
%define(kfib,x,%if(%[x<3],1,%[%kfib(%[x-1])+%kfib(%[x-2])]))\
"5" = "%kfib(5)"
%locals(i,%for(i,1,10,))\
"%%i" = "%i"

---

%define(func,a,b,a = %a ; b = %b)\
"a = x ; b = y" = "%func(x,y)"

---

%define(varfunc1,a,b::,%encode(%b))\
%varfunc1(a)
%varfunc1(a,1,2,3)

%define(varfunc2,a,b:3:,%encode(%b))\
%varfunc2(a,1,2)
%varfunc2(a,1,2,3)

%define(varfunc3,a,b::3,%encode(%b))\
%varfunc3(a)
%varfunc3(a,1,2,3)
%varfunc3(a,1,2,3,4)

%define(varfunc4,a,b:3:4,%encode(%b))\
%varfunc4(a,1,2)
%varfunc4(a,1,2,3)
%varfunc4(a,1,2,3,4)
%varfunc4(a,1,2,3,4,5)
