2014-04-28 77 views
1

对于此功能:函数参数是如何定义的?

plus1 = (+) 1 

我可以使用:

Prelude> plus1 3 
4 

类型PLUS1是

plus1 :: Integer -> Integer 

如何函数参数整数被允许在这里?在我的函数定义中,Integer函数参数定义在哪里?

我不确定我期望会发生什么,但是来自Java的所有参数都需要定义为方法的一部分,但这里似乎有幕后的事情发生了吗?

+0

您使用短语“功能参数”至少对我来说有点混乱。你能更明确地陈述你认为会发生什么事情吗? – Chuck

+0

@Chuck请参阅更新 –

+0

这个例子实际上用于解释curried函数,参见:http://www.haskell.org/tutorial/functions.html。 –

回答

8

(如果我们忽略Num类型类了一下,假装+适用于Integer唯一为简单起见,)(+)Integer -> (Integer -> Integer)类型的函数(括号是没有必要的,因为->是右关联,但为了清楚起见,我添加了它们)。这意味着它需要Integer类型的参数,并产生一个类型为Integer -> Integer的函数作为结果。

因此,当您将(+)应用于整数1时,您确实会得到该类型的函数作为结果。由于add1拥有该结果,因此它是Integer -> Integer类型的函数,这就是为什么您可以将其应用为plus1 3

+3

+1,很难理解currying,但如果你知道Java/Javascript,你需要将'add'看作'function add(o1){return function(o2){return o1 + o2; }}',并将其称为'add(1)(2)'。那么应该清楚'add(1)'实际上是什么。 –

相关问题