Как уже было сказано в комментариях, вы забыли закрыть парн. Это будет работать так:
sineApprox x n = ((-1)^n) * ((x ** (2*n+1))/facOfN(2*n+1))
Обратите внимание, что эта проблема была бы очевидна при использовании лучшего текстового редактора. Будучи новичком, я предлагаю вам перейти на iHaskell, который имеет очень простой интерфейс и обладает достаточно мощными функциями редактора.
Проблема была бы также были очевидны, если вы не использовали столько ненужных парнеров. Следующие могут быть опущены точно так же, некоторые могут быть заменены на $
. Пока мы находимся в стиле ...
sumToN f x n -- checking ==1 is not safe in general
| n<=1 = f $ x 1
| otherwise = f x n + f x (n-1)
facOfN = product [1..n]
sineApprox x n = (-1)^n * x**(2*n+1)/facOfN (2*n+1)
sine x = sumToN . sineApprox x
На другом примечании: в общем, вы всегда должны использовать сигнатуры типов. Этот код действительно имеет проблемы, потому что все счетные переменные являются автоматическими с плавающей запятой (как и все остальное). Они должны быть действительно Int
s, что требует конверсий в факториале & dagger;:
sumToN :: Num n => (Int -> n) -> Int -> n
sumToN f x n
| n<1 = 0
| otherwise = f x n + f x (n-1)
facOfN :: Num n => Int -> n
facOfN = product [1 .. fromIntegral n]
sineApprox :: Fractional n => n -> Int -> n
sineApprox x n = (-1)^n * x^(2*n+1)/facOfN (2*n+1)
sine
sine x = sumToN . sineApprox x
& крестик;
BTW, явно используя факториалы - это почти всегда плохая идея, так как числа быстро становятся невероятно большими. Кроме того, вы выполняете много дублирующихся действий. Лучше размножайтесь по мере добавления!
У вас есть недостающая скобка в конце строки 'sineApprox'. –
Является ли это объятиями? В ghci ошибка является скорее более описательной: 'parse error (возможно, неправильный отступ или несогласованные скобки)' – leftaroundabout