Haskell 打印阶乘

Haskell print factorial

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

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

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

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

Error:(3, 8) ghc: Couldn't match expected type a1 -> t0' with actual typeIO ()' The function print' is applied to two arguments, but its type(a0 -> a0) -> IO ()' has only one In a stmt of a 'do' block: print fact 4 In the expression: do { print fact 4 }

我做错了什么?

你需要括号:

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)))