Sono nuovo di Haskell e sto cercando di applicare una funzione (gcd) per l'input su standard in, che è separato dalla linea e ogni riga contiene nientemeno che due numeri. Ecco un esempio del mio ingresso:Haskell - Cercando di applicare una funzione alle righe di più numeri
3 10 4 1 100 288 240
Attualmente sto rompendo ogni linea in una tupla di entrambi i numeri, ma sto avendo difficoltà a capire come separare queste tuple e applicare una funzione a loro. Ecco quello che ho finora:
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
Qualsiasi informazione come due un buon posto per iniziare la ricerca di questa risposta sarebbe molto apprezzato. Ho letto il tutorial di Learning Haskell e non ho trovato alcuna informazione su questo particolare problema.
provare a scrivere una funzione di puro 'f :: String -> Int', che prende una linea del vostro input e calcola la prima gcd. In una seconda fase, applica quella funzione all'input all'interno di 'main'. Dai anche un'occhiata a 'uncurry :: (a -> b -> c) -> ((a, b) -> c)' dal Preludio. – sjakobi