Haskell如何评估此签名?
Haskell如何评估此签名?,haskell,signature,currying,partial-application,Haskell,Signature,Currying,Partial Application,ggt_euklid::Nat1->(Nat1->Nat1) 我试图学习部分应用程序,我知道在这种情况下,如果省略括号,我将得到相同的结果,但我不知道该如何计算此签名 据我所知,括号表示它是一个函数?这是否意味着ggt_euklid接受一个值Nat1并返回一个函数 以下是完整的功能: ggt_euklid x y | x == y = x |x>y =ggt_euklid(x-y) y |x<y =ggt_euklid x (y-x) ggt_euklid x y |x==y=x
ggt_euklid::Nat1->(Nat1->Nat1)
我试图学习部分应用程序,我知道在这种情况下,如果省略括号,我将得到相同的结果,但我不知道该如何计算此签名
据我所知,括号表示它是一个函数?这是否意味着ggt_euklid接受一个值Nat1并返回一个函数 以下是完整的功能:
ggt_euklid x y
| x == y = x
|x>y =ggt_euklid(x-y) y
|x<y =ggt_euklid x (y-x)
ggt_euklid x y
|x==y=x
|x> y=ggt_euklid(x-y)y
|您已经正确理解了类型签名:它接受一个参数并返回一个函数。这就是Haskell中“多参数”函数的工作原理:通过咖喱。通过尝试此等效实现,您可以看到这一点:
ggt_euklid :: Nat1 -> (Nat1 -> Nat1)
ggt_euklid x = \y -> result
where result | x == y = x
| x > y = ggt_euklid (x-y) y
| x < y = ggt_euklid x (y-x)
ggt_euklid::Nat1->(Nat1->Nat1)
ggt_euklid x=\y->result
其中结果| x==y=x
|x>y=ggt_euklid(x-y)y
|x
在这里,我介绍了这个毫无意义的结果
变量,作为使用模式保护的工具,但其思想是相同的。您已经正确理解了类型签名:它接受一个参数并返回一个函数。这就是Haskell中“多参数”函数的工作原理:通过咖喱。通过尝试此等效实现,您可以看到这一点:
ggt_euklid :: Nat1 -> (Nat1 -> Nat1)
ggt_euklid x = \y -> result
where result | x == y = x
| x > y = ggt_euklid (x-y) y
| x < y = ggt_euklid x (y-x)
ggt_euklid::Nat1->(Nat1->Nat1)
ggt_euklid x=\y->result
其中结果| x==y=x
|x>y=ggt_euklid(x-y)y
|x
在这里,我介绍了这个毫无意义的result
变量,作为使用模式保护的工具,但其思想是相同的
这是否意味着ggt_euklid接受一个值Nat1并返回一个
功能
No,它仍然意味着ggt_euklid
接受一个类型为Nat1
的参数,并返回类型为Nat1->Nat1
的函数,即使括号被省略
箭头->
始终是右关联性(当没有括号时),即:
相当于
Nat1 -> (Nat1 -> Nat1)
它与函数应用程序相对应,始终保持左关联性。(无括号时)例如:
ggt_euklid 1 2
相当于
(ggt_euklid 1) 2
这里
及
因此,无论一个或两个参数是否应用于ggt_euklid
,它总是首先返回Nat1->Nat1
类型的函数,如果提供了第二个参数,它将第二个参数应用于返回的函数
这是否意味着ggt_euklid接受一个值Nat1并返回一个
功能
No,它仍然意味着ggt_euklid
接受一个类型为Nat1
的参数,并返回类型为Nat1->Nat1
的函数,即使括号被省略
箭头->
始终是右关联性(当没有括号时),即:
相当于
Nat1 -> (Nat1 -> Nat1)
它与函数应用程序相对应,始终保持左关联性。(无括号时)例如:
ggt_euklid 1 2
相当于
(ggt_euklid 1) 2
这里
及
因此,无论一个或两个参数是否应用于ggt_euklid
,它总是首先返回Nat1->Nat1
类型的函数,如果提供了第二个参数,它将第二个参数应用于返回的函数 “括号表示它是一个函数?”否,->
表示它是一个函数。“括号表示它是一个函数”的可能重复项?否,->
表示它是一个函数。的可能重复项