我一直在尝试创建一个计算整数多项式的函数。
现在我有了
> type Poly = [Int]
> polyEval :: [(Float,Int)] -> Float -> [(Float,Int)]
> polyEval [] _ = []
> polyEval ((c,g):xs) n = map (\ (c,g) -> (c*n,g)) xs
如果我输入polyEval [] 3
,则输出为[]
。但是当我想计算像polyEval [3] 2
这样的东西时,Hugs说
ERROR - Cannot infer instance
*** Instance : Num (Float,Int)
*** Expression : polyEval [3] 2
为什么?
答案 0 :(得分:3)
您承诺编译器将元组(Float, Int)
的列表放到polyEval
函数中,但是只放置3
。
Haskell尝试将3投射到(Float,Int),但这是不可能的。如果你将polyEval称为polyEval [(1.0, 3)] 2
,它将编译正常。
另一点 - 您在列表polyEval ((c,g):xs)
的头部进行模式匹配,并在后续计算中删除结果。