【问题标题】:Generating tuples of grid coordinates in Haskell在 Haskell 中生成网格坐标的元组
【发布时间】:2016-04-19 00:59:01
【问题描述】:

我想编写一个函数来生成一个包含 n×n 网格坐标的元组列表。

例如:

> genGrid 2
[(0,0),(0,1),(1,0),(1,1)]
> genGrid 3
[(0,0),(0,1),(0,2),(1,0),(1,1),(1,2),(2,0),(2,1),(2,2)]

我知道我可以通过执行以下操作来生成对角线:

genDiagonal n = zip [0..] [0..n-1]

我在想有一个相当简单的方法可以做到这一点,也许是我的对角函数的变体,但我现在是空白的。

【问题讨论】:

  • [(x, y) | x <- [0..n-1], y <- [0..n-1]] 表示行优先,或[(y, x) ...] 表示列优先。
  • 另请参阅this question,它会生成所需的确切输出(尽管这是一个不同的问题)。
  • grid d n = sequence $ replicate d [0..n] 将生成大小为nd 维网格。这可以部分评估以获得二维网格2dGrid = grid 2
  • 这也几乎是 stackoverflow.com/questions/4119730/cartesian-product 的复制品,它提供了一堆替代解决方案。我最喜欢的是(,) <$> [0..x] <*> [0..x]

标签: haskell grid-layout


【解决方案1】:

range 函数这样做:

Data.Ix> range ((0, 0), (2, 3))
[(0,0),(0,1),(0,2),(0,3),(1,0),(1,1),(1,2),(1,3),(2,0),(2,1),(2,2),(2,3)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2012-01-30
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多