continue de la question précédente:Utilisation Fractions dans Haskell
Je suis en train d'écrire la série de puissance dans Haskell,
e^x = 1 + x + x^2/2! + x^3/3! + ...
telle qu'elle sortira
[1,1,1/2,1/6,...]
J'ai déjà une fonction ici qui fonctionne sans '/ (factorial y)'
factorial :: (Integral a) => a -> a
factorial 0 = 1
factorial n = n * factorial (n - 1)
powerSrs x = 1 : powerSrsFunc[1..] where
powerSrsFunc (p: xs) =
p : powerSrsFunc[ (x^y)%(factorial y) | y <-xs ]
Cependant, je reçois une erreur quand je lance
>take 5 (powerSrs 1)
<interactive>:34:9:
Ambiguous type variable `a0' in the constraints:
(Fractional a0)
arising from a use of `powerSrs' at <interactive>:34:9-16
(Integral a0)
arising from a use of `powerSrs' at <interactive>:34:9-16
(Num a0) arising from the literal `1' at <interactive>:34:18
Probable fix: add a type signature that fixes these type variable(s)
In the second argument of `take', namely `(powerSrs 1)'
In the expression: take 5 (powerSrs 1)
In an equation for `it': it = take 5 (powerSrs 1)
Encore une fois, il est une erreur de type, que je ne comprends pas.
m'a dit @eakron d'utiliser le package Data.Ratio, mais le (%) imprime un rapport comme si:
2%3
mais je veux
2/3
Quelqu'un pourrait-il expliquer les erreurs de type?
Votre approche est un peu encombrée et lente. Une méthode plus intelligente est 'e x = map fst $ itérer (\ (t, n) -> (t * x/n, n + 1)) (1, 1)'. L'idée est que pour trouver un terme dans la série il suffit de connaître son index et le terme qui le précède. –