【发布时间】:2026-01-06 19:20:03
【问题描述】:
我要解决一个 lambda 演算问题。我达到了某个点,但我不知道如何继续:
h f x = \g -> g (f x g)
(h::a1 f::a2 x::a3)::a4 = (\g -> g::a5 (f::a2 x::a3 g::a5)::a6)::a4
a1 = a2 -> a3 -> a4
a2 = a3 -> a5 -> a6
a5 = a6 -> a4
a1 = (a3 -> a5 -> a4) -> a3 -> a4
a1 = (a3 -> (a6->a4) -> a4) -> a3 -> a4
有什么方法可以完成吗?我使用“a1,a2,a3...”来表示元素或函数的类型。例如,1::Int、2.4::Float、f::a1、x::a3 等等。不知道够不够清楚...
非常感谢!!
【问题讨论】:
-
我很确定大多数人不理解您在这里使用的符号。由于他们无法掌握问题所在(以及到目前为止您的解决方案是什么),因此他们无法帮助您。
-
好的,我稍微解释一下以防万一。我希望,人们可以更好地理解它:)
-
您使用
::用于类型注释,\x -> ...用于 lambda,据我所知,它们的组合是 Haskell 以及与之密切相关的事物所独有的。鉴于此,为什么不直接在 GHCi 中输入:t \f x -> \g -> g (f x g)看看它会告诉你什么? -
大概是因为整个练习都是在考验他理解和计算类型的能力,显然是值得的。
-
另一个提醒接受下面的答案。点击绿色勾号。
标签: functional-programming lambda-calculus