1

我有这样的功能

iter :: Int -> (a -> a) -> a -> a    
iter n f a = f (f ... (f a) .. )

我如何在无类型的 lambda 演算中定义这样的函数?

任何提示/帮助将不胜感激。

4

2 回答 2

1

纯 lambda 演算中不存在数字本身。您必须为数字设计一种表示形式(并表明它们确实像数字一样)。基本思想是您可以定义数字,以便它们正是您需要的迭代函数:n将是一个 lambda 项,当给定一个函数时f,计算 的n第 次迭代f

这是一个被称为Church Encoding的想法。

于 2011-04-26T05:57:45.110 回答
0
iter == (rec g (fn f (fn n (fn x ((= n 0) x (g f (- n 1) (f x))))))) 
于 2013-10-04T11:42:30.287 回答