Haskell打印阶乘

时间:2015-02-04 20:19:56

标签: haskell math factorial

我刚刚开始编写Haskell编程,主要是因为我在寻找一种比C#更强大的数学语言,而且现在我很困惑。

现在我正试图简单地找到4的阶乘并打印出来,这是我到目前为止写的:

fact n = product [1..n]
main = do
   print fact 4

当我尝试调试它时,我得到了

  

错误:(3,8)ghc:无法匹配预期类型a1 -> t0' with actual type IO()'       函数print' is applied to two arguments, but its type(a0 - > a0) - > IO()'只有一个       在'do'块的stmt中:print fact 4       在表达式中:do {print fact 4}

我做错了什么?

1 个答案:

答案 0 :(得分:9)

你需要括号:

main = do
    print (fact 4)

GHC看到的是fact4作为print的单独参数传递,但您想要的是将4应用于fact,然后将该结果应用于print。你也可以使用

main = do
    print $ fact 4

$运算符本身并没有执行任何操作,但它的优先级非常低,例如+的优先级低于*,并且它与是的,所以你可以写点像

f $ g . h $ m 1 $ 2 + 3

而不是

f ((g . h) (m 1 (2 + 3)))