2016-04-06 11 views
-1

2つのイメージの共用体関数を作成したいのですが、これは2つのリストを結合するunionList関数を作成することから始めました。Haskell:リストユニオンを改善する

unionList :: String -> String -> String 
unionList xs ys = xs ++ foldl (flip delete) ys xs 

これは機能しますが、どのようにしたいのですか。
私はそれが同じように仕事をしたい:

input = unionList [’ ’,’ ’,’X’,’X’,’ ’] [’X’,’ ’,’X’,’ ’,’X’] 
output = "X XXX" 

これを達成するために行うの方法上の任意のアイデアを。

編集:私は最終的に2つのイメージの結合を作成しようとしています。

image 1 = [" XX ",  image 2 = ["XX XX",   type Img = [String] 
      " X X ",    " X ", 
      " XX "]    "XX XX"]   

^

Input = (imgUnion (image 1) (image 2)) 

は私に2枚の画像の和集合を与える必要があります。

imgUnion :: Img -> Img -> Img 
+0

長さ1のリストにしか作用せず、パターンマッチング(リストと 'Char'リテラルで)を使用します。あなたが私が何を意味しているのか分からないなら、Googleの "pattern matching haskell"。次に、(空のリストに一致する)ケースを追加し、任意の長さのリストをサポートするために 'unionList'への再帰呼び出しを追加します。 – jberryman

+3

'zipWith'を見てください。 –

+0

@ReinHenrichs - 私はzipWithを調べて、イメージユニオンに使用します。しかし、私はunionList関数を最初に定義したように動作させ、zipWithと共に使用する必要があります。 – evian1

答えて

1

として定義
imgUnionはこれを行うには良い方法はおそらくありますが、私は、メソッドのカップルを試し、いくつかの楽しみを持っていました。リストの先頭の項目に一致する

パターン:

unionList1 :: String -> String -> String 
unionList1 ('X':xs) (_ :ys) = 'X' : unionList1 xs ys 
unionList1 (_ :xs) ('X':ys) = 'X' : unionList1 xs ys 
unionList1 (_ :xs) (_ :ys) = ' ' : unionList1 xs ys 
unionList1  _  _ = [] 

ガード!

zipWithで提案されたよう
unionList2 :: String -> String -> String 
unionList2 (x:xs) (y:ys) 
    | x == ' ' = y : rest 
    | y == ' ' = x : rest 
    | otherwise = x : rest 
    where rest = unionList2 xs ys 
unionList2 _ _ = [] 

そしてソリューション:

unionList3 :: String -> String -> String 
unionList3 = zipWith (\x y -> if x /= ' ' then x else y) 

あなたはその後、画像上でこれらの労働組合の機能のいずれかを使用できます。

imgUnion :: [String] -> [String] -> [String] 
imgUnion = zipWith unionList3 

main :: IO() 
main = do 
    let img1 = [" XX ", 
       " X X ", 
       " XX "] 
     img2 = ["XX XX", 
       " X ", 
       "XX XX"] 

    mapM_ putStrLn (imgUnion img1 img2) 

は出力として与える:

XXXXX 
XX X 
XXXXX 
+0

UnionList機能用です。どのようにイメージユニオン関数にこれを含めるか。 (問題の編集) – evian1

+0

あなたの編集した質問を含めるために私の答えを編集しましたが、これはあなたが探しているものですか? –

関連する問題