2017-05-30 2 views
0

Ich versuche, den Benutzer zu sagen, ob eine gegebene Zahl gerade oder ungerade ist, aber es doen't scheinen ...Haskell Funktion funktioniert nicht, kann mir jemand sagen, warum?

selbst
typeOfInt :: Int -> String 

typeOfInt integerValue 
    |integerValue `mod` 2 == 0 = "even number" 
    |otherwise = "odd number" 

typeOfInt 27 
+5

Wie funktioniert es nicht? – gobrewers14

+3

Erraten: Der Test 'typeOfInt 27' darf nicht in die .hs-Datei geschrieben werden, sondern ist ein Ausdruck, der innerhalb von GHCi ausgewertet werden soll. – chi

+0

Danke !!! Jetzt weiß ich. – Will

Antwort

7

Der Code funktioniert ok es ist und funktioniert, aber es sieht aus wie Sie versucht, um die Funktion in einer pythonischen Weise zu bewerten, nicht genau, wie Sie die Funktionen in Haskell verwenden sollten. Sie haben hier Optionen:

  1. Mit dem REPL durch ghci im Verzeichnis ausgeführt wird und dann die Datei in dem Laden (mit dem Befehl :l <filename>.hs). Dort können Sie die Funktion interaktiv verwenden, indem Sie sie wie in der Datei (typeOfInt 27) oder mit anderen Funktionen (map typeOfInt [1, 2, 3, 4, 5]) aufrufen.

  2. Erstellen einer Hauptmethode und Kompilieren der Datei. Die Hauptmethode in Haskell muss eine main :: IO()-Methode sein, und diese wird ausgeführt, sobald Sie eine kompilierte Datei ausführen.

Für Ihr Beispiel können Sie putStrLn verwenden, um die Ergebnisse zu erhalten, die Sie scheinen zu suchen:

main :: IO() 
main = putStrLn $ typeOfInt 27 

Wie Sie in diesem Fall sehen können, ist es wohl sinnvoller ist die verwenden ghci und spielen mit den Funktionen, anstatt zu kompilieren.

+0

Vielen Dank, sehr hilfreich! – Will

Verwandte Themen