对2D列表中的元素求和,然后除以该数字,然后将该数字转换为字符

时间:2019-02-16 23:22:33

标签: haskell

我需要对一个三元组的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如何解决这个问题。请帮忙!

1 个答案:

答案 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]