Haskell打印阶乘

Ber*_*rer 0 math haskell factorial

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

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

fact n = product [1..n]
main = do
   print fact 4
Run Code Online (Sandbox Code Playgroud)

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

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

我究竟做错了什么?

bhe*_*ilr 9

你需要括号:

main = do
    print (fact 4)
Run Code Online (Sandbox Code Playgroud)

什么是GHC看到的是fact4作为单独的参数传递print,但你想要的是适用4fact,然后应用结果print.你也可以用

main = do
    print $ fact 4
Run Code Online (Sandbox Code Playgroud)

$运营商本身并不做任何事情,但它有一个非常低的优先级,怎么样+是优先级低于*,和它关联到右侧,这样你就可以写类似

f $ g . h $ m 1 $ 2 + 3
Run Code Online (Sandbox Code Playgroud)

代替

f ((g . h) (m 1 (2 + 3)))
Run Code Online (Sandbox Code Playgroud)