[英]How to combine two different type of lists in haskell
如何合並兩種不同類型的列表並遍歷Haskell中的結果?
例如:
input: [1,2,3] ['A','B','C'],
output: ["A1","A2","A3","B1","B2","B3","C1","C2","C3"].
我嘗試使用Int
和Char
進行示例,例如:
combine :: Int -> Char -> String
combine a b = show b ++ show a
但是,這不起作用,因為如果我將此功能用於combine 3 'A'
"'A'3"
combine 3 'A'
,則輸出將為"'A'3"
,而不是"A3"
。
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"]
您可以執行以下操作;
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
(其中<$>
是infix fmap
)將構造一個應用列表函子,而show <$> xs
就像map show xs
產生["1","2","3"]
並按<*>
我們僅將應用列表應用於["1","2","3"]
生成["A1","A2","A3","B1","B2","B3","C1","C2","C3"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.