0

我在 Haskell 中有以下表示二维矩阵的元组
let a =[(1,2,3),(4,5,6),(7,8,9)]
如何单独访问每个索引?(例如 a[1][1]、a[0][1] 等)有没有更好的方法来解释 haskell 中的二维数组?

4

2 回答 2

2

下面是一个如何使用标准Data.Array模块创建和索引不可变二维数组的示例:

Prelude> import Data.Array
Prelude Data.Array> let a = array ((0,0),(2,2)) [((i,j),3*i+j)| i <- [0..2], j <- [0..2]]
Prelude Data.Array> a ! (1,1)
4

更多信息可以在 Haskell Wiki 上找到。

于 2013-10-26T02:44:59.197 回答
1

如果您要经常这样做——使用矩阵、数组等——那么最好遵循 Mikhail 的建议之一。

如果您只是对如何执行此操作感到好奇,那么它基本上归结为模式匹配。您可以做的一件事是使用该!!函数从列表(本例中为行)中获取零索引元素,然后您必须进行模式匹配以从元组中获取特定元素。

例如,在下面的代码中,getRow使用 获取特定行!!,然后getElem返回特定的元组元素,因此最终getElem a 1 1 == 5例如。您当然必须添加一些代码来处理越界索引:

getRow :: [(Integer, Integer, Integer)] -> Int -> (Integer, Integer, Integer)
getRow matrix row = matrix !! (row :: Int)

getElem :: [(Integer, Integer, Integer)] -> Int -> Int -> Integer
getElem matrix row column
  | column == 0 = x
  | column == 1 = y
  | column == 2 = z
  where (x, y, z) = getRow matrix row
于 2013-10-26T02:44:52.333 回答