Haskell - Versuche, eine Funktion auf Zeilen mehrerer Zahlen anzuwenden

9

Ich bin neu bei Haskell und versuche eine Funktion (gcd) für die Eingabe auf Standard-In anzuwenden, die Zeile-getrennt ist und jede Zeile nicht weniger oder mehr als zwei Zahlen enthält. Hier ist ein Beispiel meiner Eingabe:

%Vor%

Ich zerlege gerade jede Zeile in ein Tupel aus beiden Zahlen, aber ich habe Probleme herauszufinden, wie man diese Tupel trennt und eine Funktion auf sie anwendet. Hier ist, was ich bisher habe:

%Vor%

Jede Information als zwei, ein guter Ort, um nach dieser Antwort zu suchen, würde sehr geschätzt werden. Ich habe das Lern-Haskell-Tutorial gelesen und habe keine Informationen zu diesem speziellen Problem gefunden.

    
midnightconman 30.03.2015, 23:09
quelle

2 Antworten

3

Sie sind ziemlich nah dran. Es gibt keinen Grund, vor dem Aufruf von gcd in ein Tupel oder eine Liste von Tupeln zu konvertieren.

%Vor%

Alle interessanten Dinge liegen zwischen print und contents . lines teilt den Inhalt in Zeilen auf. map (...) wendet die Funktion auf jede Zeile an. words teilt die Zeile in Wörter auf. \[x,y] -> gcd (read x) (read y) wird auf einer Liste von zwei Strings übereinstimmen (und einen Fehler sonst werfen - nicht gut im Allgemeinen, aber gut für ein einfaches Programm wie dieses), lesen Sie diese Strings als Integer s und berechnen Sie ihre GCD.

Wenn Sie faule IO verwenden möchten, um jedes Ergebnis nach dem Eingeben jeder Zeile zu drucken, können Sie es wie folgt ändern.

%Vor%     
user2407038 31.03.2015, 00:32
quelle
0

Oder Sie können es in einem zwingenderen Stil tun:

%Vor%     
Yuuri 31.03.2015 10:39
quelle

Tags und Links