输入错误Haskell,有什么问题?

时间:2011-10-06 14:47:32

标签: haskell hugs

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

这是功能:

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

可能显而易见的是,我很遗憾,但我已经在这里度过了一段时间,并且无法想到解决方案。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

据推测,您希望以chooseFn作为参数调用r。要解决此错误,请改为呼叫chooseF n r