mid*_*man 9 string parsing haskell
我是Haskell的新手,我正在尝试将一个函数(gcd)应用于标准输入,这是行分隔的,每行包含不少于或多于两个数字.这是我输入的一个例子:
3 10 4 1 100 288 240
我目前正在将每一行分成两个数字的元组,但我无法弄清楚如何分离这些元组并将函数应用于它们.这是我到目前为止:
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
任何信息作为两个开始寻找这个答案的好地方将非常感激.我已阅读Learning Haskell教程,但未找到有关此特定问题的任何信息.
你很接近。在调用之前没有理由转换为元组或元组列表gcd。
main = do 
  contents <- getContents 
  print $ map ((\[x,y] -> gcd (read x) (read y)) . words) . lines $ contents 
所有有趣的东西都在print和之间contents。lines将把内容分成几行。map (...)将函数应用到每一行。words将行分割成单词。\[x,y] -> gcd (read x) (read y)将匹配两个字符串的列表(否则会抛出错误 - 一般而言不是一个好的做法,但对于像这样的简单程序来说很好),将这些字符串读取为Integers 并计算它们的 GCD。
如果你想使用惰性IO,以便在输入每一行后打印每个结果,你可以按如下方式更改。
main = do 
  contents <- getContents 
  mapM_ (print . (\[x,y] -> gcd (read x) (read y)) . words) . lines $ contents