2017-11-02 9 views
0

文字列の2D行列を入力として受け取り、文字列の2D行列を出力として返すHaskell関数をどのように定義できますか?これは私の推測Haskell 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]] 
    |         ^^^^^^^^^^^^^^^^^^^^ 
+0

2次元行列は、[[String]、[String]]ではなく、[[String]] 'です。なぜあなたはそれをそのように定義すべきだと思いますか? –

+0

良い答えは別として、リストにデータ型のような行列を実装することは明るい考えではありません。この目的のために既に['Data.Matrix'](https://hackage.haskell.org/package/matrix-0.3.5.0/docs/Data-Matrix.html)があります。 – Redu

答えて

4

まあa Sのリストがそうa Sのリストのリストが[[a]]で、[a]です。しかし、この結果は、行自体が同じ長さではないということです。

だから、としてそれを書く必要があります:あなたは、2次元配列の概念はどちらか存在しないのJavaとそれを比較することができ

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

。したがって、配列の配列を作成します。少なくとも概念的 - - K番目の要素をルックアップするためには、O(K)時間を要するので、Haskellではリストは、リストにリンクされていることを

マインド。

行列を扱う場合は、のモジュールData.Matrixを使用して、2次元行列を扱うことができます。

関連する問題