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}
我究竟做错了什么?
你需要括号:
main = do
print (fact 4)
Run Code Online (Sandbox Code Playgroud)
什么是GHC看到的是fact和4作为单独的参数传递print,但你想要的是适用4于fact,然后应用结果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)