haskell - 在 Haskell 中生成二维网格

标签 haskell

学习 haskell 并想要一个函数来生成类似于 C 中的 2D 网格:

int data[3][3]

什么是可接受且优雅的方法?压缩?折叠?

我可以声明一个像:
x = [[0,0,0],
     [0,0,0],
     [0,0,0]]

但我想要一个带有 x y 参数的函数。努力理解没有 for/while 循环的最简单方法:(

最佳答案

您似乎在问“我应该使用什么来代替 Haskell 中的数组”,对吗?您询问了使用列表,这当然不是数组,对于任何需要非顺序访问的严肃工作(例如,列表提供 O(n) 元素访问而不是 O(1)),都应该避免使用。

你应该考虑的包:array(旧的,标准的 Haskell 数组),vector(新的,使用流融合,快速,一个实际上合理的 API,装箱或未装箱,但只有一个维度,除非你嵌套它们)和 repa(只工作在较新的 GHC 版本上,但即使在未装箱的表示上也允许多维数组和并行操作)。

初始化其中任何一个的最简单方法(当您说“生成”时,我假设您的意思是“初始化”)是它们各自的“fromList”函数。例如:

import Data.Vector as V
...
    V.fromList $ map V.fromList [[01,02,03],[11,12,13],[22,22,23]]

关于haskell - 在 Haskell 中生成二维网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6240749/

相关文章:

Haskell 多参数类(模板类型类)

haskell - 显示类型 A -> A

haskell - Gtk2hs 给出运行时错误 "Require gtk+ version 3"

haskell - haskell中有类型 'Any'吗?

haskell - 这个概念在 Haskell 中叫什么?

haskell - 如何组合将 bool 值返回给一个函数的函数

variables - State、ST、IORef 和 MVar 之间的区别

haskell - 了解何时使用 let 和 <-

haskell - 如何在 Shake 中定义定时器规则

sockets - 为什么 `forever` 意味着此代码不从套接字读取或打印到标准输出?