2016-11-02 72 views
0

有人可以解释下面的代码,它是如何一步一步做的,请。我知道这是定义一个函数,它的输入,但到底是什么(+)做什么,以及为什么有三种不同的Int S IN plus4个Int S IN plusplus的类型,而它好像有只有3个参数plusplus的代码?Haskell代码和类型的参数数量不同,为什么?

plus :: Int -> Int -> Int 
plus = (+) 

plusPlus :: Int -> Int -> Int -> Int 
plusPlus a b c = a + b + c 

回答

5

+是加法运算符。将运算符放在括号中,如(+),引用了加法函数本身,而不是使用+在现场添加两个数字。基本上,这样的:

plus = (+) 

相当于:

plus a b = a + b 

无论哪种方式,它是定义plus成为+的同义词。

在Haskell中,->用于分隔参数的类型,以及返回值。所以,

plus :: Int -> Int -> Int 

是一个函数,它有两个Int S和返回Int

plusPlus :: Int -> Int -> Int -> Int 

是一个函数,它需要三个Int S和返回Int

语法与参数和返回值相同的原因归结于currying

要想获得真正的迂腐,

plus :: Int -> Int -> Int    -- ~ Int -> (Int -> Int) 

是一个函数,它接受一个Int,并返回一个函数,它接受一个Int并返回一个Int

plusPlus :: Int -> Int -> Int -> Int  -- ~ Int -> (Int -> (Int -> Int)) 

是一个函数,它接受一个Int,并返回一个函数,它接受一个Int,并返回一个函数,它接受一个Int并返回一个Int

实际上,把Haskell函数当作多个参数是很方便的。但从技术上讲,Haskell函数总是会有一个参数。参数类型位于->的左侧,返回类型位于->的右侧,但返回类型本身可能是另一个函数。

+0

这正是我所要求的,最好的问候.. – smoothumut

相关问题