gpt4 book ai didi

haskell - 给我解释一下

转载 作者:行者123 更新时间:2023-12-04 02:45:03 25 4
gpt4 key购买 nike

潜入 Haskell,当我享受这种语言时,我发现 pointfree 风格完全难以辨认。我遇到了这个函数,它只包含这些 ASCII 鲣鸟,如下所示。

f = (.)(.)

虽然我了解它的类型签名和它的作用,但我终生无法理解它为什么这样做。所以有人可以帮我写出它的去点版本,也许可以逐步回到无点版本,如下所示:
f g x y = (g x) + y   
f g x = (+) (g x)
f g = (+) . g
f = (.) (+)

最佳答案

一般(?) (其中 ? 代表任意中缀运算符)与 \x y -> x ? y 相同.所以我们可以重写f作为:

f = (\a b -> a . b) (\c d -> c . d)

现在,如果我们将参数应用于函数,我们得到:
f = (\b -> (\c d -> c . d) . b)

现在 b只是 f 的一个参数,所以我们可以将其重写为:
f b = (\c d -> c . d) . b
.的定义是 f . g = \x -> f (g x) .如果更换外 .根据它的定义,我们得到:
f b = \x -> (\c d -> c . d) (b x)

我们可以再次转 x变成一个常规参数:
f b x = (\c d -> c . d) (b x)

现在让我们替换另一个 . :
f b x = (\c d y -> c (d y)) (b x)

现在让我们应用这个论点:
f b x = \d y -> (b x) (d y)

现在让我们再次移动参数:
f b x d y = (b x) (d y)

完毕。

关于haskell - 给我解释一下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50451946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com