Jestem nowy w Haskell i próbuję zastosować funkcję (gcd) do wprowadzania na standardowej w, która jest rozdzielana liniowo i każda linia zawiera nie mniej lub więcej niż dwie liczby. Oto przykład z mojego wejścia:Haskell - Próba zastosowania funkcji do linii o wielu numerach
3 10 4 1 100 288 240
Jestem obecnie rozbijając każdy wiersz w krotce obu liczb, ale mam problemy z zastanawianie się, jak rozdzielić te krotki i zastosować funkcję do nich. Oto, co mam do tej pory:
import Data.List
main :: IO()
main = do
n <- readLn :: IO Int
content <- getContents
let
points = map (\[x, y] -> (x, y)). map (map (read::String->Int)). map words. lines $ content
ans = gcd (fst points :: Int) (snd points :: Int)
print ans
Wszelkie informacje jako dwa dobre miejsce do rozpoczęcia poszukiwania tej odpowiedzi byłyby mile widziane. Przeczytałem samouczek Learning Haskell i nie znalazłem żadnych informacji o tym konkretnym problemie.
Spróbuj napisać czystą funkcję 'f :: string -> Int', że zajmuje linię swojego wejścia i oblicza najpierw gcd. W drugim kroku zastosuj tę funkcję do wejścia wewnątrz 'main'. Spójrz także na 'uncurry :: (a -> b -> c) -> ((a, b) -> c)' z Prelude. – sjakobi