0

我正在用haskell(使用hscurses)做一点强化学习,现在,我编写代码来制作/打印地牢。

我做的第一件事是
在 python(v3) 中创建一个带有“墙”的列表/数组,它会是这样的:

def mk_list(x, y):        
    dungeon = [['#' for j in range(y)] for i in range(x)]

    return dungeon

它会像这样打印:

import curses
def print_dungeon(window, x, y, dungeon):
    for i in range(x):
        for j in range(y):
        window.addstr(j, i, dungeon[x][y])
    window.refresh()

所以我的问题是:我怎样才能在haskell中做到这一点?我知道那里有模块Data.Array,但据我所知,它们只支持二维数组。
此外,数组必须是可变的,因为我必须稍后“挖掘”其中的房间和走廊。

但我的问题也是我应该使用数组还是列表更好?

提前致谢!

4

1 回答 1

2

Haskell 支持 n 维数组:

import Data.Array
import Data.Ix
import Control.Monad

main = do
  let myBounds = ((0,5,10),(7,8,12)) :: ((Int,Int,Int),(Int,Int,Int))
      threeDexample = array myBounds
                        [ (ijk, e) | ijk@(i,j,k) <- range myBounds,
                                     let e = i+j*10+k*100 ]

  forM_ (range myBounds) $ \ijk@(i,j,k) -> do
    putStrLn $ "value at " ++ show ijk ++ " = " ++ show (threeDexample ! ijk)

要进行变异,请使用Data.Array.MArray或使用(//)操作。

于 2016-07-08T15:23:01.423 回答