如何编写haskell函数的lambda微积分项,如map?

如何编写haskell函数的lambda微积分项,如map?,haskell,lambda-calculus,Haskell,Lambda Calculus,我正在学习Haskell中的Lambda演算,我已经了解了如何为Haskell函数(如add和succ)编写Lambda术语。对于像map这样的高阶函数,它们可以类似地编写吗 有没有一种方法可以从hoogle中的函数描述中推导出来 e、 g.您可以像Y combinator一样使用递归,但这会让它变得非常麻烦。但是,如果您正在查找源代码,在函数的右端,您会看到source,如果单击它,您可以看到它是如何在Haskell中实现的。我没有很好地解释自己,例如,add可以编写(λm.λk.λf.λx.

我正在学习Haskell中的Lambda演算,我已经了解了如何为Haskell函数(如add和succ)编写Lambda术语。对于像map这样的高阶函数,它们可以类似地编写吗

有没有一种方法可以从hoogle中的函数描述中推导出来


e、 g.

您可以像Y combinator一样使用递归,但这会让它变得非常麻烦。但是,如果您正在查找源代码,在函数的右端,您会看到
source
,如果单击它,您可以看到它是如何在Haskell中实现的。我没有很好地解释自己,例如,add可以编写
(λm.λk.λf.λx.mf(kfx))
,我可以用这种方式为高阶函数(如map)编写lambda项吗?可以,因此可以使用定点组合器进行递归调用。但是请注意,上面的add是数字的Church编码,而不是数字编码。Haskell显然不使用这种编码,而是使用CP上实现的数字U,指令集可用。你能举例说明如何使用定点组合器来实现这一点吗?你可以像Y组合器一样使用递归,但这会使它变得非常麻烦。如果你正在寻找源代码,在函数的右端,你会看到
source
,如果你点击它,你可以使用e它是如何在Haskell中实现的。我没有很好地解释我自己,例如,add可以写成
(λm.λk.λf.λx.mf(k f x))
,我可以用这种方式为高阶函数(如map)编写lambda项吗?可以,因此可以使用定点组合器进行递归调用。但是请注意,上面的add是数字的Church编码,而不是数字编码。Haskell显然不使用这种编码,而是使用CP上实现的数字你能举一个例子说明如何使用定点组合器来实现这一点吗?