我需要对一个三元组的2D列表中的元素求和 例如[[10,50,50),(60,70,90),(100,100,20)],](50,60,100),(60,70,90),(60,40,30)] >
将其除以3,然后再除以255。
现在我有这个
PatternMatch:: [Char] -> Bool -> (Int, Int, Int)-> Char
PatternMatch _ _[] = []
PatternMatch ((a,b,c):xs) = (((a + b + c) / 3) / 255) : (PatternMatch xs)
但是这将其返回为整数,但是我需要一个字符。为此,我需要一个辅助函数,但是idk如何解决这个问题。请帮忙!
答案 0 :(得分:2)
Hoogle和Google可以轻松帮助您解决此问题。您只是在寻找类型为Int -> String
的函数(char只能限制为一位;还请注意十进制值)。您会发现众所周知的函数Show
可以满足您的需求。
另外,除以3和255会使代码看起来很奇怪,只需立即除以765。
最后,不需要为这样的函数进行模式匹配,您可以使用高阶函数map :: (a -> b) -> [a] -> [b]
并编写自己的辅助函数或使用lambda函数:
patternMatch :: [(Int,Int,Int)] -> String
patternMatch = concat . map (show . (\(x,y,z) -> (x+y+z) `div` 765))
P.S .:如果您确定只会得到0..9的整数,则可以使用更简单的列表理解:
patternMatch tups = [head . show $ (x+y+z) `div` 765 |(x,y,z) <- tups]