2015-05-24 31 views
4

什么下面的函数定义/声明表示:Haskell的功能定义,而不 - >

maxCollatz :: (Integer, Integer) 

我很困惑,因为我不知道需要什么样的参数,并因此产生了什么。因为通常在函数定义中有->。例如, Int -> Int

P.S.再次为这类问题感到抱歉。

回答

8

maxCollatz是一对整数(Integer, Integer)。它不是一个函数,它不需要任何参数,也不会被调用来产生任何东西;它只是的一对整数。

在Haskell中声明类型然后实现顶层声明的语法是定义值的语法。函数是值,所以它们包含在内,但其他所有内容都包含在内。

+0

基于它的名字,我认为它是一对整数或⊥,并且没有人知道哪一个。 – dfeuer

0

此函数不接受任何参数,因此它只是一个常量元组(或一对)的两个整数。

0

这是一个函数签名,而不是整个函数的定义。

这是一个常数,而不是一个“真正的函数”(我已经看到了它的争论)。它返回一个2个整数的元组,但不需要任何东西。

1

代码行是一个有效的函数签名,因为了解函数不必采用任何参数很重要。

的参数的数目的函数采用被称为其arity.

在逻辑,数学和计算机科学中,功能或操作的元数是参数的数量或操作数的功能或操作接受。

在这种情况下,该函数需要0个参数并且是arity0。具有arity0的函数通常被称为常量函数或nullary函数。


在Python有类似的功能应该是这样的

def pair(): 
    return (1,1) 

如果你熟悉Python很显然,这个函数没有参数,并返回一对数字。这正是您提供的功能签名描述的内容。

+3

'maxCollat​​z'是一对'整型',不是函数。 Haskell中的函数总是只有一个参数,所以没有0个参数函数:http://conal.net/blog/posts/everything-is-a-function-in-haskell –