我怎么能转换成索引一个可变的数组在Haskell状况引用?

我重新编码的比赛,我问了一个问题,“我怎么可以遍历一个四链接数据的2维网格,它是一个2维数组?”,在哈斯克尔。

为了创造我用了一个很迫切的风格算法放在首位数据网格,如下图所示。 它依赖于关键的特征就是,我可以把一个索引到一个数组,创造出它的参考。 一个例子,“&数组[X] [Y]”。

我需要能够采取的索引到一个可变数组,使一个国家参考了它在Haskell。 因此,类型签名可能是

convertToSTRef :: i -> STArray sia -> ST s (STRef sa)

我看过的文件过来,都试过hoogle和hayoo,并没有找到一种方法来实现这一目标。

PS或者,如果有人有不同的算法,我可以使用,那将是巨大的。

PSS简单的当务之急算法。

const size_t rows = 20; const size_t columns = 59; block tiles[columns][rows]; block * const start = &tiles[columns/2][rows/2]; for (size_t x = 0; x < columns; ++x) for (size_t y = 0; y < rows; ++y) { tiles[x][y].floor = '^'; tiles[x][y].inhabitant = WALL; tiles[x][y].side_block[EAST] = (x + 1 < columns) ? &tiles[x + 1][y] : NULL; tiles[x][y].side_block[SOUTH] = (y + 1 < rows) ? &tiles[x][y + 1] : NULL; tiles[x][y].side_block[WEST] = (x > 0) ? &tiles[x - 1][y] : NULL; tiles[x][y].side_block[NORTH] = (y > 0) ? &tiles[x][y - 1] : NULL; }

--------------解决方案-------------

可以代表一个“指针”通过光标,即,包含一个数组基准和一个数据结构的偏移。

data Cursor tia = Cursor (tia) i

makeCursor :: STArray sia -> i -> Cursor (STArray s) ia
makeCursor = Cursor

readCursor :: Ix i => Cursor (STArray s) ia -> ST sa
readCursor (Cursor arr i) = readArray arr i

writeCursor :: Ix i => a -> Cursor (STArray s) ia -> ST s ()
writeCursor x (Cursor arr i) = writeArray arr ix

这是不可能的指向在GHC一个垃圾回收对象的内部。 垃圾收集器无法理解这样的指针。 如果数组是由垃圾收集感动,垃圾收集器不能适当地更新这些指针。 如果垃圾收集器被赋予一个指针数组的中间,它不能扫描整个阵列,因为它不能找到数组的开始。

分类:阵列 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.857 (s). 10 q(s)