我刚刚开始编程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中:打印事实4在表达式中: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)))