我有这个代码:
lado :: [([Char],Int)] -> [[Char]]
lado xs = [a | (a,b) <- xs]
我需要输出这个:
> lado [("A",3),("B",2),("C",1)]
["A","B","C","A","B","A"]
我必须输出 "A"3 次,然后输出 "B"2 次,然后输出 "C"1 次,但我只能用这段代码得到这个 ["A","B","C"]。
最佳答案
您可以使用递归来完成此操作:
lado :: [(a, Int)] -> [a]
-- base case
lado [] = []
-- take each of the non-zero elements then recurse
lado xs = map fst nonzero ++ lado subtracted
where
-- find elements with non-zero count
nonzero = filter (\x -> snd x > 0) xs
-- subtract one from the count for each of those elements
subtracted = map (\(x, n) -> (x, n - 1)) nonzero
关于list - 输出一个元素我想要的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64189254/