Tail recursion transformation for invertible functions

要約

末尾再帰関数は、一般的な再帰関数よりも広範囲の最適化を可能にします。
このため、この関数ファミリ、特に継続渡しスタイル (CPS) で記述された関数の変換と最適化について多くの研究が行われてきました。
任意の再帰関数を同等の末尾再帰関数に変換できる CPS 変換は、可逆プログラミングのコンテキストでは (高階関数などの厄介な機能に依存しているため) 非常に問題がありますが、(ローカル) 可逆性を緩和すると主張します。
(グローバルな)可逆性への移行により、状況が大幅に改善されます。
これに基づいて、可逆関数に特化した末尾再帰変換のアルゴリズムを提示します。
重要な洞察は、可逆性を保持するプログラム変換によって導入された関数は、変換の対象となる関数がそれらを呼び出すコンテキストでのみ可逆性を必要とするということです。
このようなコンテキストに対応する特注のデータ型を使用して、可逆再帰関数をこのコンテキストで動作する末尾再帰関数のペアに変換する方法を示します。
素直に抽出。

要約(オリジナル)

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.

arxiv情報

著者 Joachim Tilsted Kristensen,Robin Kaarsgaard,Michael Kirkedal Thomsen
発行日 2023-02-20 15:54:19+00:00
arxivサイト arxiv_id(pdf)

提供元, 利用サービス

arxiv.jp, Google

カテゴリー: cs.CL パーマリンク