gpt4 book ai didi

function - 相似括号函数类型之间的差异

转载 作者:行者123 更新时间:2023-12-02 19:22:10 26 4
gpt4 key购买 nike

我真的很迷恋 Haskell 中的函数类型。给出了两个函数的类型,我无法解释它们之间的真正区别是什么。

a :: Int -> (Int -> (Int -> (Int -> Int)))

b :: (((Int -> Int) -> Int) -> Int) -> Int

我还是没明白重点。我知道柯里化(Currying)的目的是什么——但我在这个例子中看不到柯里化(Currying)的概念!

函数 a:传入一个 Int,结果是另一个采用 Int 的结果......依此类推。

函数b:这与函数A有何不同?

最佳答案

也许最好的办法是考虑两个更简单的函数:

f :: a -> (b -> c)
g :: (a -> b) -> c

让我们依次看看这些函数。

第一个函数 f 接受一个 a 类型的参数,并返回一个 b -> c 类型的函数。换句话说,您可以编写如下内容,假设 x::ay::bz::c:

f :: a -> (b -> c)
f x = f'
where f' :: b -> C
f' y = z

另一种编写f签名的方法如下:

f :: a -> b -> c

这是有效的,因为默认情况下我们将 -> 绑定(bind)到右侧。它还为我们提供了另一种理解 f 的等效方法:它可以被认为是一个带有两个参数的函数,其类型为 ab,并产生 c 类型的结果。

第二个函数 g 采用一个参数,它是一个 a -> b 类型的函数。

g :: (a -> b) -> c
g h = z
where h :: a -> b

因此两者非常不同。

将此应用到您的函数中,第一个函数采用 4 个 Int 类型的值并返回一个 Int。第二个函数采用 ((Int -> Int) -> Int) -> Int 类型的单个函数,该函数采用 (Int -> Int 类型的第三个函数) 并生成一个 Int,依此类推。

关于function - 相似括号函数类型之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15164630/

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