2017-08-26 24 views
2

2つの異なるタイプのリストを組み合わせて、Haskellで結果をトラバースするにはどうすればよいですか?例えばhaskellで2つの異なるタイプのリストを結合する方法

input: [1,2,3] ['A','B','C'], 
output: ["A1","A2","A3","B1","B2","B3","C1","C2","C3"]. 

私は次のように、IntCharを使用した例を作ってみました:

combine :: Int -> Char -> String 
combine a b = show b ++ show a 

私はcombine 3 'A'ため、この機能を使用する場合、これは、しかし、動作しません、出力は"'A'3"であり、"A3"ではありません。

答えて

3

show :: Char -> Stringは確かに文字の周りに単一引用符を置く:

*Main> show 'A' 
"'A'" 

しかしtype String = [Char]以来、我々は使用することができます。

combine :: Int -> Char -> String 
combine i c = c : show i 

をそこでここでは、ヘッドとしてcと文字のリストを構築します(最初の文字)、およびshow i(整数の表現)をテールとして返します。

今、私たちは二つのリストの組み合わせを作るために、リストの内包表記を使用することができます。

combine_list :: [Int] -> [Char] -> [String] 
combine_list is cs = [combine i c | c <- cs, i <- is] 

この後、出力を生成します。

*Main> combine_list [1,2,3] ['A','B','C'] 
["A1","A2","A3","B1","B2","B3","C1","C2","C3"] 
2

次のようにあなたが行うことができます。

combiner :: [Char] -> [Int] -> [String] 
combiner cs xs = (:) <$> cs <*> (show <$> xs) 

*Main> combiner ['A','B','C'] [1,2,3] 
["A1","A2","A3","B1","B2","B3","C1","C2","C3"] 

ここ(:) <$> cs<$>が中置fmapある)show <$> xsmap show xsよう["1","2","3"]を得ている間に応用的リストファンクタを構築し<*>によって先ほど["A1","A2","A3","B1","B2","B3","C1","C2","C3"]

を得 ["1","2","3"]に応用的リストを適用します
関連する問題