【问题标题】:Haskell 2D matrix of stringHaskell 二维字符串矩阵
【发布时间】:2017-11-02 17:57:51
【问题描述】:

如何定义一个将二维字符串矩阵作为输入并返回二维字符串矩阵作为输出的 Haskell 函数?这是我的猜测

empty2o :: [[String], [String]] -> [[String], [String]]

但这给了我这个错误

code.hs:17:12: error:
    Illegal type: `[[String], [String]]'
      Perhaps you intended to use DataKinds
   |
17 | empty2o :: [[String], [String]] -> [[String], [String]]
   |            ^^^^^^^^^^^^^^^^^^^^

code.hs:17:36: error:
    Illegal type: `[[String], [String]]'
      Perhaps you intended to use DataKinds
   |
17 | empty2o :: [[String], [String]] -> [[String], [String]]
   |                                    ^^^^^^^^^^^^^^^^^^^^

【问题讨论】:

  • 二维矩阵是[[String]],而不是[[String], [String]]。我很好奇你为什么认为你应该这样定义它?
  • 除了好的答案之外,用列表实现像数据类型这样的矩阵并不是一个好主意。已经有 Data.Matrix 用于此目的。

标签: string list haskell matrix


【解决方案1】:

as 的列表是[a],所以as 的列表是[[a]]。然而,这样做的结果是行本身的长度不同。

所以你应该写成:

empty2o :: <b>[[String]]</b> -&gt; <b>[[String]]</b>

您可以将它与 Java 中的二维数组的概念也不存在进行比较。所以你创建了一个数组数组。

请注意 - 至少在概念上 - Haskell 中的列表是链表,因此为了查找第 k 个元素,它需要 O(k) 时间.

如果您想使用矩阵,可以使用带有模块 Data.Matrix 的包 matrix 来处理二维矩阵。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 2017-04-18
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多