samer@4: % tail_call - Simulate effect of tail call samer@4: % samer@4: % tail_call :: (A{1:N}->B{1:M}), A{1:N} -> thunk(B{1:M}). samer@4: % samer@4: % thunk(B{1:M}) ::= samer@4: % exists C{1:L} . cell { C{1:L}->B{1:M}, cell { C{1:L} } } samer@4: % | cell { {0}, cell { B{1:L} } } samer@12: % | void -> B{1:M}. samer@4: function ret=tail_call(fn,varargin), ret={fn,varargin}; end