1

我发现理解 Haskell 世界有点困难,所以我非常感谢一些帮助!

我想创建二维字符数组(一个 10x10 的符号矩阵),它应该是可变的,所以我尝试了这个:

import Data.Array.IO
arr <- newArray ((1,10), (1,10)) '!' :: IO (IOArray (Int, Int) Char)
a <- readArray arr (1,1)

但它没有成功。您能否告诉我如何创建数组以及如何访问其成员,或者如果这不是一个好方法,另一种方法可以做到这一点?

而且我想问一下是否有一种方法可以将数组中的某些元素以不同的颜色着色。我导入了 System.Console.ANSI 但我不太确定如何准确地将我想要的颜色设置为不同的颜色。输出红色字母的示例将非常有帮助。

非常感谢您!:)

4

1 回答 1

1

这在我的笔记本电脑上编译并运行没有错误。

import Data.Array.IO       -- from the array package
import System.Console.ANSI -- from the ansi-terminal package

main :: IO ()
main = do
        arr <- newArray ((1,1), (10,10)) '!' :: IO (IOArray (Int, Int) Char)
        -- You had ((1,10), (1,10)), in the line above.
        -- That meant (1,10) was the only valid index!
        ch <- readArray arr (1,1)
        setSGR [SetColor Foreground Dull Red]   -- set foreground colour to red
        putStr [ch]
        setSGR []                               -- reset colours
        putStrLn ""

我赞同 CA McCann 的建议,即使用普通的不可变数组而不是可变数组。(不幸的是,我在 Haskell 中使用数组的经验很少,所以我将把它留给其他人来建议如何一步一步从旧数组计算更新的数组。)

于 2013-01-04T18:37:15.893 回答