Как исправить эту функцию логарифма haskell? - PullRequest
2 голосов
/ 15 января 2012
natlog x = until cond count (1,1,0)
    where 
        cond (_,val,_) = val < 0.001
        count (i,val,sum) = (i+1,(-x)^i/i,sum+val)

Эта функция пытается считать журнал 1 + x

Проблема похожа на Какая сигнатура типа этой функции Haskell? .

Код ошибки:

<interactive>:1:8:
    Ambiguous type variable `t0' in the constraints:
      (Num t0) arising from the literal `1' at <interactive>:1:8
      (Integral t0) arising from a use of `natlog' at <interactive>:1:1-6
      (Fractional t0) arising from a use of `natlog'
                      at <interactive>:1:1-6
    Probable fix: add a type signature that fixes these type variable(s)
    In the first argument of `natlog', namely `1'
    In the expression: natlog 1
    In an equation for `it': it = natlog 1

1 Ответ

4 голосов
/ 15 января 2012

Проблема в том, что ваш ввод должен быть Integral из-за ^ и Fractional из-за /. Вы можете легко исправить это, используя другой оператор для одного из них; например, используйте ** вместо ^:

natlog x = until cond count (1,1,0)
    where 
        cond (_,val,_) = val < 0.001
        count (i,val,sum) = (i+1,(-x)**i/i,sum+val)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...