1

フォローするのを手伝ってくれませんか?

1 つのデータ配列にマージする必要がある 2 つの配列があります。以下のコードはマージを行いますが、デカルトを作成します...

出力で次のことをしたいと思います:

DataXY {var1 = "x1", var2 = "y1"},
DataXY {var1 = "x2", var2 = "y2"},
DataXY {var1 = "x3", var2 = "y3"}

- -コード

data  DataXY = DataXY {
   var1 :: String,
   var2 :: String
} deriving (Eq, Show)

parse ::  [DataXY]
parse = x
    where
        x = [DataXY v1 v2 | v1 <- arr1, v2 <- arr2]
            where
                arr1 = ["x1", "x2", "x3"]
                arr2 = ["y1", "y2", "y3"]

ありがとう、M.

4

2 に答える 2

9

zipWithあなたがここで欲しいものです

parse :: [DataXY]
parse = zipWith DataXY arr1 arr2
   where arr1 = ["x1", "x2", "x3"]
         arr2 = ["y1", "y2", "y3"]
于 2013-10-29T15:14:50.953 に答える
4

デカルト積を避けるために、2 つのリストを圧縮します。

parse ::  [DataXY]
parse = x
    where
        x = [DataXY v1 v2 | (v1,v2)  <- zip arr1 arr2]
            where
                arr1 = ["x1", "x2", "x3"]
                arr2 = ["y1", "y2", "y3"]

GHC では、 -XParallelListComp を使用して並列リスト内包表記を有効にし、次のように記述できます。

parse ::  [DataXY]
parse = x
    where
        x = [DataXY v1 v2 | v1 <- arr1 | v2 <- arr2 ]
            where
                arr1 = ["x1", "x2", "x3"]
                arr2 = ["y1", "y2", "y3"]
于 2013-10-29T15:14:51.143 に答える