import Data.List (foldl')
show_tuple :: (Num a, Num b) => (String, a, b) -> String
show_tuple (name, id, something) =
"Your name is: " ++ name ++ "\n" ++
"Your ID is: " ++ (show id) ++ "\n" ++
"Your something: " ++ (show something) ++ "\n\n"
-- transforms the list, and then concatenates it into a single string
show_tuple_list :: (Num a, Num b) => [(String, a, b)] -> String
show_tuple_list = (foldl' (++) "") . (map show_tuple)
输出:
*Main Data.List> putStr $ show_tuple_list [("ab", 2, 3), ("cd", 4, 5)]
Your name is: ab
Your ID is: 2
Your something: 3
Your name is: cd
Your ID is: 4
Your something: 5
get1st (a,_,_) = a
get2nd (_,a,_) = a
get3rd (_,_,a) = a
showTuples [] = ""
showTuples (x:xs) = "Your name is:" ++ show(get1st(x)) ++ " Your ID is: " ++ show(get2nd(x)) ++ "\n" ++ showTuples xs
main = do
let x = [("A",100,1),("B",101,2)]
putStrLn . showTuples $ x
4条答案
按热度按时间ha5z0ras1#
最简单的方法是创建一个函数,用于处理列表中的某个元素。因此,您需要如下所示:
然后将此函数应用于列表中的每个元素,这意味着您要使用Map函数:
因此,如果您的列表名为
xs
,则需要类似以下的内容:很明显,这会给你一个
[String]
类型的结果,所以你可能会对unlines
函数感兴趣:这只是取一个字符串列表,并创建一个字符串,其中每个元素由一个新行分隔。
把这些放在一起,你会得到:
hgqdbh6s2#
对于一个元组,只需模式匹配所有元素,然后对它们做一些事情。如果有一个函数可以做到这一点,你可以使用
map
来转换整个列表。输出:
vnzz0bqm3#
快速和肮脏的解决方案
OR(作者:@马克谢诺夫)
pgvzfuti4#
请尝试: