簡體   English   中英

如何在Haskell中合並兩種不同類型的列表

[英]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"].

我嘗試使用IntChar進行示例,例如:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM