我有这样的功能
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
我如何在无类型的 lambda 演算中定义这样的函数?
任何提示/帮助将不胜感激。
我有这样的功能
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
我如何在无类型的 lambda 演算中定义这样的函数?
任何提示/帮助将不胜感激。
纯 lambda 演算中不存在数字本身。您必须为数字设计一种表示形式(并表明它们确实像数字一样)。基本思想是您可以定义数字,以便它们正是您需要的迭代函数:n
将是一个 lambda 项,当给定一个函数时f
,计算 的n
第 次迭代f
。
这是一个被称为Church Encoding的想法。
iter == (rec g (fn f (fn n (fn x ((= n 0) x (g f (- n 1) (f x)))))))