我正在使用拥抱编译一个简单的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
可能显而易见的是,我很遗憾,但我已经在这里度过了一段时间,并且无法想到解决方案。
答案 0 :(得分:4)
chooseF
有两个参数,但由于括号n r
被解析为单个参数。因此,删除n r
周围的括号,它应该没问题。
答案 1 :(得分:2)
问题在于您将(n r)
传递给chooseF
。 Hugs从中确定术语n
必须是a -> b
类型的某个函数,您要将r
传递到该函数中。然后将结果部分应用于chooseF
。
据推测,您希望以chooseF
和n
作为参数调用r
。要解决此错误,请改为呼叫chooseF n r
。