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

Equ*_*nox 4 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))
Run Code Online (Sandbox Code Playgroud)

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

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

z95 n = Z95(n %% 95)
z95 18 = 18%95
Run Code Online (Sandbox Code Playgroud)

我试图做一个双倍map访问我的矩阵的元素,但后来我没有弄清楚如何应用我的z95功能.

谢谢你的帮助!

Chr*_*lor 7

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

instance Functor Matrice where
  fmap f (Mat xss) = Mat (map (map f) xss)
Run Code Online (Sandbox Code Playgroud)

现在你可以写了

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

或者在你的情况下

>> fmap z95 m
Run Code Online (Sandbox Code Playgroud)

  • 没问题......老兄. (6认同)