这是首先完成的家庭作业。我们给出了一个新类型Matrix,它是教授对抽象矩阵的实现。我的主要问题是如何创建Matrix类型列表。我需要实现的第一个函数fillWith采用一个元组,即要创建的矩阵的行数(行数,列数)以及放置在每个索引处的数据。
module Matrix (Matrix, fillWith, fromRule, numRows, numColumns,
at, mtranspose, mmap, add, mult)
where
-- newtype is like "data", but has some efficiency advantages
newtype Matrix a = Mat ((Int,Int),(Int,Int) -> a)
--fillWith :: (Int,Int) -> a -> (Matrix a)
--fillWith ix val = Mat ((,
--trying to create a row of type Matrix
row_matrix :: [a] -> Matrix a
row_matrix ls = Mat ((1, length ls), (\x y -> if x > 1 then undefined else ls !! (y-1)))
答案 0 :(得分:5)
你只是错过了一些parens和逗号:
row_matrix ls = Mat ((1, length ls), (\(x,y) -> if x > 1 then undefined else ls !! (y-1)))
^-^-^--- add these
Mat
是一个元组,其中:
您可以始终使用where
或let
子句来简化值的构造,例如:
row_matrix as = Mat (bounds, accessor)
where bounds = (1, length as)
accessor (i,j) = if i > 1 then undefined else as !! (j-1)
使用where
子句使代码更具可读性。
要实施fillWith
,我会遵循相同的方法:
fillWith bounds val = Mat (bounds, accessor)
where accessor (i,j) = ???
我认为现在显而易见的是???应该是。