私はこのような機能を持っています
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
型指定されていないラムダ計算でそのような関数を定義するにはどうすればよいですか?
ヒント/ヘルプをいただければ幸いです。
私はこのような機能を持っています
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
型指定されていないラムダ計算でそのような関数を定義するにはどうすればよいですか?
ヒント/ヘルプをいただければ幸いです。
純粋なラムダ計算では、数値自体は存在しません。数値の表現を設計する必要があります (実際にそれらが数値のように振る舞うことを示します)。基本的な考え方は、必要な反復関数になるように数値を定義できるということです。これは、関数が与えられたときにの反復を計算するラムダ項になります。nfnf
これはChurch Encodingとして知られる考え方です。
iter == (rec g (fn f (fn n (fn x ((= n 0) x (g f (- n 1) (f x)))))))