string - Haskell - 尝试将函数应用于多个数字的行

标签 string parsing haskell

我是 Haskell 的新手,我正在尝试应用一个函数(gcd)来输入标准输入,它是行分隔的,每行包含不少于或多于两个数字。这是我的输入示例:

3
10 4
1 100
288 240

I am currently breaking up each line into a tuple of both numbers, but I am having trouble figuring out how to separate these tuples and apply a function to them. Here is what I have so far:

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)将匹配两个字符串的列表(否则会抛出错误 - 通常不是好的做法,但对于像这样的简单程序来说很好),将这些字符串读取为 Integer s 并计算它们的 GCD。

如果你想利用惰性IO,为了在输入每一行后打印每个结果,你可以改变它如下。
main = do 
  contents <- getContents 
  mapM_ (print . (\[x,y] -> gcd (read x) (read y)) . words) . lines $ contents 

关于string - Haskell - 尝试将函数应用于多个数字的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29357910/

相关文章:

c# - 如何从段落(System.Windows.Documents)中获取整个文本内容?

python - 有没有办法在 Python 中删除字符串中除字母以外的所有字符?

haskell - 神秘单词 ("LPS") 出现在 Haskell 输出列表中

string - 字符串间隔如何工作?

c - 解决指向字符串的指针中的段错误

python - 是否有用 Python 编写的 GEDCOM 解析器?

解析大文件

Haskell 无意义的性能 - 有效地将多个函数映射到相同的数据

Haskell Swagger 镜头自动生成

python - 计算字符串中有多少个字母表字符