这个Haskell程序打印“1.0”如何让它打印“1”?
fact 0 = 1
fact x = x * fact (x-1)
place m n = (fact m) / (fact n) * (fact (m-n))
main = do
print (place 0 0)
答案 0 :(得分:10)
通过使用/
操作,您要求haskell使用小数数据类型。在这种情况下,你可能不想要那个。最好使用整数类型,例如Int
或Integer
。所以我建议你做以下事情:
1.为fact
函数添加类型声明,例如fact :: Integer -> Integer
2.使用quot
代替/
。
所以你的代码应该是这样的:
fact :: Integer -> Integer
fact 0 = 1
fact x = x * fact (x-1)
place :: Integer -> Integer -> Integer
place m n = (fact m) `quot` (fact n) * (fact (m-n))
main = do
print (place 0 0)
另外,正如@leftaroundabout指出的那样,您可能希望使用更好的算法来计算这些二项式数。
答案 1 :(得分:2)
您可以使用round
:
print (round $ place 0 0)
这会将格式更改为您想要的格式。然而,redneb的答案是正确的方法。