Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Haskell-尝试将函数应用于多个数字的行_String_Parsing_Haskell - Fatal编程技术网

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

String Haskell-尝试将函数应用于多个数字的行,string,parsing,haskell,String,Parsing,Haskell,我是Haskell的新手,我正在尝试将一个函数(gcd)应用于标准in的输入,该函数是行分隔的,每行包含不少于或多于两个数字。以下是我的输入示例: 3 10 4 1 100 288 240 3. 10 4 1 100 288 240 我目前正在将每一行分解为两个数字的元组,但我很难弄清楚如何分离这些元组并对它们应用函数。以下是我到目前为止的情况: import Data.List main :: IO () main = do n <- readLn :: IO Int cont

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

3 10 4 1 100 288 240 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
导入数据。列表
main::IO()
main=do
n Int)。映射单词。行$content
ans=gcd(fst点::Int)(snd点::Int)
打印ans

任何信息,作为一个很好的地方开始寻找这个答案将不胜感激。我已经阅读了学习Haskell教程,但没有找到关于这个问题的任何信息。

你已经非常接近了。在调用
gcd
之前,没有理由转换为元组或元组列表

main = do 
  contents <- getContents 
  print $ map ((\[x,y] -> gcd (read x) (read y)) . words) . lines $ contents 

或者,您可以采用更具强制性的方式:

import Control.Monad

main = do
    n <- readLn
    replicateM_ n $ do
        [x, y] <- (map read . words) `liftM` getLine
        print $ gcd x y
import-Control.Monad
main=do

n尝试编写一个纯函数
f::String->Int
,它接受一行输入并首先计算gcd。在第二步中,将该函数应用于
main
中的输入。另外,请看前奏曲中的
uncurry::(a->b->c)->((a,b)->c)
。您需要跳过第一行,该行只包含单个后续条目。感谢大家的快速回复。我清楚地看到了现在正在做什么,我也将不得不在序曲中看到uncurry。
import Control.Monad

main = do
    n <- readLn
    replicateM_ n $ do
        [x, y] <- (map read . words) `liftM` getLine
        print $ gcd x y