Полиномиальная оценка в Haskell
Я пытался сделать функцию, которая оценивает полиномы целых чисел.
Теперь у меня есть
> 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
Говорит Хугс
ERROR - Cannot infer instance
*** Instance : Num (Float,Int)
*** Expression : polyEval [3] 2
Зачем?
1 ответ
Вы обещаете компилятору выложить список кортежей (Float, Int)
в polyEval
функция, но вы положили только 3
, Haskell попытается привести 3 к (Float, Int), но это невозможно. Если вы называете polyEval как polyEval [(1.0, 3)] 2
это будет хорошо скомпилировано.
Еще один момент - вы делаете сопоставление с шаблоном в начале списка polyEval ((c,g):xs)
и отбросить результаты в следующих вычислениях.