Полиномиальная оценка в 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) и отбросить результаты в следующих вычислениях.

Другие вопросы по тегам