Ich bin sehr neu zu Haskell und ich versuche, eine grundlegende Funktion, die den Mittelwert einer Liste findet. Ich habe es fast gelöst, abgesehen von dem letzten Teil der Trennung, den ich machen muss.Division von zwei Funktionen in Haskell
randInts = take 5 $ randoms (mkStdGen 11) :: [Int]
listSum :: (Num a) => [a] -> a
listSum [] = 0
listSum (x:xs) = x + listSum xs
listLength :: (Num a) => [a] -> a
listLength [] = 0
listLength (x:xs) = 1 + listLength xs
listMean :: (Num a) => [a] -> a
listMean [] = 0
listMean x = (listSum x)/(listLength x)
Dies ist, was mit Ich begann, wo listSum und ListLength grundsätzlich die gleiche Funktionalität auf Listen wie die Summe und die Länge Operatoren haben jeweils und listMean nimmt diese beiden und sie trennt. Als ich das laufen, aber ich erhalte eine Fehlermeldung sagen „ableiten kann nicht (Fractional a) von einer Verwendung von‚/‘aus dem Kontext ergeben: Num a“
Zuerst dachte ich nur, ich hätte verwendet der falsche Typ und die geschaltete ListeMit Startliste mit listeMean :: (Fraktional a) => [a] -> a. Dies ermöglichte mir das Kompilieren, aber als ich versuchte, es auszuführen, indem ich ihm randInts gab, erhielt ich stattdessen die Fehlermeldung "Keine Instanz für (Fractional Int), die sich aus einer Verwendung von 'listMean' ergibt."
Ich bin mir nicht sicher, was ich hier vermisse. Könnte ich bitte einen Rat bekommen?
Sie meinen, fraktional zu entfernen? Ich tat das und es gab mir eine Fehlermeldung "Erwarte einen Typ, aber 'a' hat Art 'Constraint'" –
Das gibt mir den Fehler "Keine Instanz für (Fractional Int) aus einer Verwendung von 'ListMean'" –