[英]Number of arguments in Haskell code and type is different, why?
任何人都可以解释下面的代码,请逐步执行。 我知道这是定义一个函数,它的输入,但到底是什么(+)
做的,为什么有三种不同的Int
s中plus
四 Int
S IN plusplus
的类型,而它好像只有3个参数 plusplus
“的代码?
plus :: Int -> Int -> Int
plus = (+)
plusPlus :: Int -> Int -> Int -> Int
plusPlus a b c = a + b + c
+
是加法运算符。 将运算符放在括号中(如(+)
是指加法函数本身,而不是使用+
在位置上将两个数字相加。 基本上,这是:
plus = (+)
等效于:
plus a b = a + b
无论哪种方式,它都将plus
定义为+
的同义词。
在Haskell中, ->
用于分隔参数的类型以及返回值 。 所以,
plus :: Int -> Int -> Int
是一个需要两个Int
并返回一个Int
的函数。
plusPlus :: Int -> Int -> Int -> Int
是一个需要三个Int
并返回一个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函数始终采用一个参数。 参数类型在->
的左侧,返回类型在->
的右侧,但是返回类型本身可能是另一个函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.