smo*_*mut 0 syntax haskell types arguments type-signature
任何人都可以解释下面的代码,请一步一步做.我知道它是定义一个函数和它的输入,但到底是什么(+)做的,为什么有三种不同的IntS IN plus和4个 Int S IN plusplus的类型,而它好像有只有3个参数中plusplus的代码?
plus :: Int -> Int -> Int
plus = (+)
plusPlus :: Int -> Int -> Int -> Int
plusPlus a b c = a + b + c
Run Code Online (Sandbox Code Playgroud)
+是加法运算符.将运算符放在括号中,例如(+),指的是加法函数本身,而不是用于+在现场添加两个数字.基本上,这个:
plus = (+)
Run Code Online (Sandbox Code Playgroud)
相当于:
plus a b = a + b
Run Code Online (Sandbox Code Playgroud)
无论哪种方式,它都被定义plus为同义词+.
在Haskell中,->用于分隔参数的类型以及返回值.所以,
plus :: Int -> Int -> Int
Run Code Online (Sandbox Code Playgroud)
是一个函数,它需要两个Ints并返回一个Int.
plusPlus :: Int -> Int -> Int -> Int
Run Code Online (Sandbox Code Playgroud)
是一个需要Int三秒并返回一个的函数Int.
参数和返回值的语法相同的原因是由于currying.
真是迂腐
plus :: Int -> Int -> Int -- ~ Int -> (Int -> Int)
Run Code Online (Sandbox Code Playgroud)
是一个函数,它接受一个Int并返回一个函数,该函数接受Int并返回一个Int.
plusPlus :: Int -> Int -> Int -> Int -- ~ Int -> (Int -> (Int -> Int))
Run Code Online (Sandbox Code Playgroud)
是取一个的功能Int,并返回一个函数,它接受一个Int,并返回一个函数,它接受一个Int,并返回Int.
在实践中,将Haskell函数称为采用多个参数是很方便的.但从技术上讲,Haskell函数总是采用一个参数.参数类型位于左侧->,返回类型位于右侧->,但返回类型本身可能是另一个函数.