咖喱和无故障的功能

Sud*_*ha 2 haskell functional-programming

咖喱

add::Int->Int->Int
add x y = x+y
Run Code Online (Sandbox Code Playgroud)

Uncurried

add1::(Int,Int)->Int
add1 (x,y)=x+y
Run Code Online (Sandbox Code Playgroud)

我有几个问题重新调整CurriedUncurried函数,考虑上面的函数,

问题1

在Uncurried函数输入参数是as (Int,Int),它是否与输入元组一致?我们怎么能区分那个?

问题2

关于无故障和咖喱功能有哪些优缺点?什么时候和为什么要使用?

bzn*_*bzn 9

在Uncurried函数中,输入参数为(Int,Int),因此它是否与输入元组相等?我们怎么能区分那个?

它不仅是等价的,而且一个元组.这add1是一个函数,它接受一对(2元组)的Ints并返回一个Int.

什么是关于未经证实和干扰的功能的利弊?,以及在哪里使用它们?

根据经验,我会说:如果你没有充分的理由不使用咖喱功能.它们有一个很好的功能,你可以部分应用它们,例如你可以写f = add 1,f现在有类型,f :: Int -> Int并始终添加1参数.

这有很多应用程序,在Haskell中常见,因为它非常方便.例如,向列表中的所有元素添加1的函数就是这样map (add 1).

另外,语法噪音要小得多.