在尝试编译我的代码时,我得到了:
[1 of 1] Compiling Main ( survey2.hs, survey2.o )
survey2.hs:20:1:
Couldn't match expected type ‘IO t0’ with actual type ‘Integer’
In the expression: main
When checking the type of the IO action ‘main’
我已经尝试过指定' 9'那是作为一堆不同类型输入到main,包括IO,IO t,IO t0,int等。我理解基于我在其他地方的函数定义,如果一个Integer没有输入到该函数中没有其他功能可以正常工作。我不确定如何将正确的类型放入主体。
factorial:: Integer -> Integer
factorial n
| n <= 1 = 1
| otherwise = n * factorial(n-1)
binomial :: (Integer, Integer) -> Integer
binomial (n, k)
| k > n = 0
| k < 0 = 0
| otherwise = factorial(n) / (factorial(n-k) * factorial(k))
bell :: Integer -> Integer
bell n
| n <= 1 = 1
| otherwise = sum [ binomial(n-1, k-1) * bell (k-1) | k<-[0..n-1] ]
bellSum :: Integer -> Integer
bellSum n = sum [ bell(k) | k<-[0..n] ]
main = bell(9 :: Integer )
答案 0 :(得分:5)
如果main
位于主模块中(通常称为Main
),则其类型必须为IO a
(通常为IO ()
)。
由于bell 9
类型Integer
,因此类型不匹配。您需要使用Integer
print :: Show a => a -> IO ()
打印Integer
:
main = print (bell 9)
请注意,(/)
不适用于Integer
,您需要使用div
代替:
| otherwise = factorial(n) `div` (factorial(n-k) * factorial(k))