对于此功能:函数参数是如何定义的?
plus1 = (+) 1
我可以使用:
Prelude> plus1 3
4
类型PLUS1是
plus1 :: Integer -> Integer
如何函数参数整数被允许在这里?在我的函数定义中,Integer函数参数定义在哪里?
我不确定我期望会发生什么,但是来自Java的所有参数都需要定义为方法的一部分,但这里似乎有幕后的事情发生了吗?
对于此功能:函数参数是如何定义的?
plus1 = (+) 1
我可以使用:
Prelude> plus1 3
4
类型PLUS1是
plus1 :: Integer -> Integer
如何函数参数整数被允许在这里?在我的函数定义中,Integer函数参数定义在哪里?
我不确定我期望会发生什么,但是来自Java的所有参数都需要定义为方法的一部分,但这里似乎有幕后的事情发生了吗?
(如果我们忽略Num
类型类了一下,假装+适用于Integer
唯一为简单起见,)(+)
是Integer -> (Integer -> Integer)
类型的函数(括号是没有必要的,因为->
是右关联,但为了清楚起见,我添加了它们)。这意味着它需要Integer
类型的参数,并产生一个类型为Integer -> Integer
的函数作为结果。
因此,当您将(+)
应用于整数1
时,您确实会得到该类型的函数作为结果。由于add1
拥有该结果,因此它是Integer -> Integer
类型的函数,这就是为什么您可以将其应用为plus1 3
。
+1,很难理解currying,但如果你知道Java/Javascript,你需要将'add'看作'function add(o1){return function(o2){return o1 + o2; }}',并将其称为'add(1)(2)'。那么应该清楚'add(1)'实际上是什么。 –
您使用短语“功能参数”至少对我来说有点混乱。你能更明确地陈述你认为会发生什么事情吗? – Chuck
@Chuck请参阅更新 –
这个例子实际上用于解释curried函数,参见:http://www.haskell.org/tutorial/functions.html。 –