将函数应用于矩阵的每个元素

时间:2014-01-03 10:37:27

标签: haskell matrix

我正在尝试将函数应用于Matrix但我不知道如何继续。

以下是我定义矩阵的方法:

data Matrice a = Mat [[a]]

montre [] = "/"
montre (t:q) = "" ++ (Pp.printf "%5s" (show t)) ++ " " ++ (montre q)

instance (Show a) => Show (Matrice a) where
        show (Mat ([])) = ""
        show (Mat (t:q)) = "/" ++ (montre t) ++ "\n" ++ (show (Mat q))

然后,一旦我的Matrix被定义,我想将我的函数z95应用于矩阵的每个元素。

这是我的z95函数的签名(允许将整数转换为此整数模95)

z95 n = Z95(n %% 95)
z95 18 = 18%95

我尝试执行双map访问我的Matrix的元素,但后来我没有弄清楚如何应用我的z95函数。

感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

您可以为您的类型定义Functor实例,这是将函数映射到容器元素的常用方法。

instance Functor Matrice where
  fmap f (Mat xss) = Mat (map (map f) xss)

现在你可以写

>> let m = Mat [[1,2,3],[4,5,6]]
>> fmap (+3) m -- => Mat [[4,5,6],[7,8,9]]

或在你的情况下

>> fmap z95 m