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 type
IO ()'
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 看到的是 fact
和 4
作为单独的参数传递给 print
,但您想要的是将 4
应用到 fact
,然后将该结果应用于 print
。你也可以使用
main = do
print $ fact 4
$
运算符本身不执行任何操作,但它的优先级非常低,例如 +
的优先级低于 *
,并且它与对,所以你可以这样写
f $ g . h $ m 1 $ 2 + 3
而不是
f ((g . h) (m 1 (2 + 3)))
我刚开始编程 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 type
IO ()' The functionprint' 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 看到的是 fact
和 4
作为单独的参数传递给 print
,但您想要的是将 4
应用到 fact
,然后将该结果应用于 print
。你也可以使用
main = do
print $ fact 4
$
运算符本身不执行任何操作,但它的优先级非常低,例如 +
的优先级低于 *
,并且它与对,所以你可以这样写
f $ g . h $ m 1 $ 2 + 3
而不是
f ((g . h) (m 1 (2 + 3)))