2012-01-15 9 views
2
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) 

この関数問題はWhat is the type signature of this Haskell function?に似ている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 

答えて

4

問題は、あなたの入力が原因/のため^FractionalIntegralにする必要があるということです。これらのいずれかに別の演算子を使用することで、これを簡単に修正できます。たとえば、^の代わりに**を使用します。

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) 
関連する問題