0

我正在使用拥抱来编译一个简单的 Haskell 函数来计算排列的数量。我希望它返回一个整数,但我需要对浮点数进行操作。我试图将答案计算为浮点数,然后将其截断,但由于某种原因它无法解决。

这是功能:

choose :: Float -> Float -> Integer
 choose n r = truncate (chooseF (n r))
    where
        chooseF::Float->Float->Float
        chooseF n r | n==r = 1
                        | otherwise =  n / (n-r) * chooseF(n-1) r

这是错误(第 35 行是函数的第二行):

ERROR "/homes/mb4110/SimpleMath":35 - Type error in application
*** Expression     : n r
*** Term           : n
*** Type           : Float
*** Does not match : a -> b

我可能很明显错过了一些东西,但我已经做了很长一段时间了,想不出解决方案。

4

2 回答 2

4

chooseF接受两个参数,但由于括号n r被解析为单个参数。因此,删除周围的括号n r,它应该没问题。

于 2011-10-06T14:53:00.010 回答
2

问题是你正在传递(n r)chooseF. Hugs 从中确定,该术语n必须是某种类型的函数a -> b,您要传递到该函数中r。然后,此结果将部分应用于chooseF.

大概,您想chooseF同时使用nr作为参数来调用。要修复此错误,请chooseF n r改为调用。

于 2011-10-06T14:53:49.143 回答