我正在尝试将函数应用于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
函数。
感谢您的帮助!
答案 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