【问题标题】:Producing higher dimensional lists in Haskell在 Haskell 中生成更高维的列表
【发布时间】:2021-01-12 22:31:48
【问题描述】:

我写了一个 Haskell 函数来生成一个元组列表。

defineIndices :: Int -> Int -> [(Int,Int)]
defineIndices n m = [(i,j) | i <- [1..n], j <- [1..m]]

该函数具有以下行为。

λ> defineIndices 2 3
[(1,1),(1,2),(1,3),(2,1),(2,2),(2,3)]

事实证明,我需要如下行为的函数:

λ> defineIndices2D 2 3
[[(1,1),(1,2),(1,3)],[(2,1),(2,2),(2,3)]]

其中defineIndices2D 返回一个(Int,Int) 的列表,维度为n*m。我有点卡在这里,我想知道如何更改我现有的解决方案以生成更高阶的列表。

我的最终目标是生成一个 x,y 索引列表,用作 Data.Map 映射中值的键。

【问题讨论】:

    标签: haskell


    【解决方案1】:

    您可以嵌套列表推导,因此您可以创建一个外部列表推导,它将枚举m 的值,并且您每次都会产生一个您使用另一个列表推导表达式生成的列表:

    defineIndices2D :: Int -> Int -> [[(Int,Int)]]
    defineIndices2D n m = [ [(i,j) | j <- [1..m]] | i <- [1..n]]

    对于 2×3 网格,这会产生:

    Prelude> defineIndices2D 2 3
    [[(1,1),(1,2),(1,3)],[(2,1),(2,2),(2,3)]]
    

    【讨论】:

      猜你喜欢
      • 2017-12-13
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 1970-01-01
      • 2020-12-15
      • 1970-01-01
      • 2017-06-26
      相关资源
      最近更新 更多