Dies ist, was ich bisher habe, ich bin mir ziemlich sicher, dass die Funktion selbst korrekt ist, aber ich bin verwirrt, was im main = do Block zu tun ist. Der Fehler, den ich bekomme, ist, dass die Funktion eine Ganzzahl will, aber ich gebe es stattdessen eine Zeichenfolge. Ich gehe davon aus, dass es mit dem getLine-Teil zu tun hat und dass ich nicht überprüfe, ob die eingegebene Zahl ein int ist.Wie schreibe ich ein Haskell-Programm, das die Primfaktoren einer bestimmten Zahl ausgibt?
factors :: Int -> [Int]
factors n = [x | x <- [1..n], mod n x == 0]
primeFactors :: Int -> [Int]
primeFactors n = [x | x <- [1..n], mod n x == 0, isPrime x]
isPrime x = (length (factors x)) == 2
main = do
putStrLn "Enter a number."
number <- getLine
let x = factors number
putStrLn x
Die Fehler, die ich bekomme, wenn ich diesen Code ausführen:
primeFactor.hs:9:19: error:
• Couldn't match type ‘[Char]’ with ‘Int’ Expected type: Int Actual type: String • In the first argument of ‘factors’, namely ‘number’ In the expression: factors number In an equation for ‘x’: x = factors numberprimeFactor.hs:10:12: error:
• Couldn't match type ‘Int’ with ‘Char’ Expected type: String Actual type: [Int] • In the first argument of ‘putStrLn’, namely ‘x’ In a stmt of a 'do' block: putStrLn x In the expression: do { putStrLn "Enter a number."; number <- getLine; let x = factors number; putStrLn x }
Bitte fügen Sie tatsächliche Fehlermeldungen in Ihre Frage ein, anstatt paraphrasierte oder gekürzte Versionen zu präsentieren. Sie sind wirklich nützlich. Die Fehlermeldung, über die Sie im Kommentar nachfragen, ist, weil putStrLn eine Zeichenfolge und x eine Liste von Einträgen, keine Zeichenfolge, wünscht. – amalloy
Danke, ich bin ziemlich neu auf dieser Seite, ich werde dies bei zukünftigen Fragen beachten – Tyler