在学习 Haskell 时,我遇到了一个挑战,要找到两个函数f
和g
,这样f g
和f . g
是等价的(和总数,所以喜欢f = undefined
或f = (.) f
不计算)。给定的解决方案是f
和g
都等于\x -> x . x
(或join (.)
)。
(我注意到这不是 Haskell 特有的;它可以用纯组合逻辑表示为“find f
and g
such that f g = B f g
”,然后给定的解决方案将转换为f = g = W B
.)
我理解为什么当我扩展给定的解决方案时它会起作用,但我不明白如果你还不知道它是如何找到它的。这是我能走多远:
f g = f . g
(给定)f g z = (f . g) z
(两边的eta扩展)f g z = f (g z)
(简化 RHS)
而且我不知道如何从那里开始。在尝试找到解决方案时,我接下来会做什么?