3 research outputs found
Tail recursion transformation for invertible functions
Tail recursive functions allow for a wider range of optimisations than
general recursive functions. For this reason, much research has gone into the
transformation and optimisation of this family of functions, in particular
those written in continuation passing style (CPS).
Though the CPS transformation, capable of transforming any recursive function
to an equivalent tail recursive one, is deeply problematic in the context of
reversible programming (as it relies on troublesome features such as
higher-order functions), we argue that relaxing (local) reversibility to
(global) invertibility drastically improves the situation. On this basis, we
present an algorithm for tail recursion conversion specifically for invertible
functions. The key insight is that functions introduced by program
transformations that preserve invertibility, need only be invertible in the
context in which the functions subject of transformation calls them. We show
how a bespoke data type, corresponding to such a context, can be used to
transform invertible recursive functions into a pair of tail recursive function
acting on this context, in a way where calls are highlighted, and from which a
tail recursive inverse can be straightforwardly extracted.Comment: Submitted to 15th Conference on Reversible Computation, 202