2014-11-09 3 views
0

Я пытаюсь моделировать Тэйлор многочлен х^хМое Haskell функция падает на Скомпилируй

---Macularian for e^x 
e :: (Num a) => a -> Int -> a 
e value precsion = sum $ take precsion [((x^n)/product [1..n]) | x <- value, n <- [0..]] 

Это моя ошибка

[email protected]:73-3:78 Could not deduce (a ~ [a]) from the context (Num a) bound by the type signature for e :: Num a => a -> Int -> a at /home/app/isolation-runner-work/projects/75872/session.207/src/Main.hs:2:6-29 a is a rigid type variable bound by the type signature for e :: Num a => a -> Int -> a at /home/app/isolation-runner-work/projects/75872/session.207/src/Main.hs:2:6 Relevant bindings include value :: a (bound at /home/app/isolation-runner-work/projects/75872/session.207/src/Main.hs:3:3) e :: a -> Int -> a (bound at /home/app/isolation-runner-work/projects/75872/session.207/src/Main.hs:3:1) …

+6

Кстати, это не «крах» компилятора или вашей программы. Это просто ошибка типа. – chi

ответ

5

Этой часть: x <- value означает, что value список. Если вы измените его на let x = value (или просто переименовать value в x вы исправить эту конкретную ошибку компиляции:

e x precision = take precision [ ...formula involving x and n... | n <- [0..] ] 

Затем можно запустить в другую ошибку компилятора с участием вашего типа подписи, поэтому я хотел бы прокомментировать, что, и затем ghci сообщит вам, что подпись должна использовать :type.

+0

Не генерировать бесконечный список и 'возьмите 'конечную часть. Используйте' ex precision = [... формулу с участием x и n ... | n <- [0 .. precision - 1]] 'вместо. – Franky

+0

Haskell имеет ленивую оценку, так что результаты те же. – ErikR

Смежные вопросы