在学习 Haskell 时,我遇到了一个挑战,要找到两个函数f和g,这样f g和f . g是等价的(和总数,所以喜欢f = undefined或f = (.) f不计算)。给定的解决方案是f和g都等于\x -> x . x(或join (.))。
(我注意到这不是 Haskell 特有的;它可以用纯组合逻辑表示为“find fand gsuch 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)
而且我不知道如何从那里开始。在尝试找到解决方案时,我接下来会做什么?