lambda 演算中的迭代函数
我有一个这样的函数,
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
如何在非类型化 lambda 演算中定义这样的函数?
任何提示/帮助将不胜感激。
I have a function like this
iter :: Int -> (a -> a) -> a -> a
iter n f a = f (f ... (f a) .. )
how can i define such function in un-typed lambda calculus ?
any hint/help will be appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在纯 lambda 演算中,数字本身并不存在。您必须设计数字的表示(并表明它们确实表现得像数字)。基本思想是,您可以定义数字,使它们完全成为您需要的迭代函数:
n
将是一个 lambda 项,当给定函数f 时
,计算f
的第 n 次迭代。这是一个被称为教堂编码的想法。
Numbers do not exist per se in pure lambda calculus. You have to design a representation for numbers (and show that indeed those behave like numbers). The basic idea is that you can define numbers so that they are exactly the iteration function you need :
n
would be a lambda term that, when given a functionf
, compute then
th iteration off
.This is an idea known as Church Encoding.