String Haskell-尝试将函数应用于多个数字的行
我是Haskell的新手,我正在尝试将一个函数(gcd)应用于标准in的输入,该函数是行分隔的,每行包含不少于或多于两个数字。以下是我的输入示例: 3 10 4 1 100 288 240 3. 10 4 1 100 288 240 我目前正在将每一行分解为两个数字的元组,但我很难弄清楚如何分离这些元组并对它们应用函数。以下是我到目前为止的情况: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
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