Haskell二维矩阵的字符串

时间:2017-11-02 17:57:51

标签: string list haskell matrix

如何定义Haskell函数,该函数将字符串的2D矩阵作为输入并返回字符串的2D矩阵作为输出?这是我的猜测

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]]
   |                                    ^^^^^^^^^^^^^^^^^^^^

1 个答案:

答案 0 :(得分:4)

a的列表是[a],因此a列表的列表是 [[a]] 。然而,其结果是行本身不具有相同的长度。

所以你应该把它写成:

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

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

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

如果您想使用矩阵,可以使用包含模块Data.Matrix的包matrix,以便使用2d矩阵。