簡體   English   中英

用 Haskell 替換字符串列表中的字符串

[英]Replace a string in list of strings with Haskell

我正在嘗試創建 function 來替換字符串列表中的給定字符串,例如remplacer 'a' ["leaf","cacao"]給出一個列表["le f","c co"]

使用此代碼中的 Haskell:

remplacer k = map(\c -> if c== k then ' '; else c)

一旦我打電話

map remplacer "\r" ["abcd\r","alo\r"]

我得到無法將類型“char”與“[char]”匹配

或者結果應該是

["abcd ","alo "]

讓我們看一下類型:

map                :: (a -> b) -> [a] -> [b]
"\r"               :: [Char] -- Which is equivalent to String
["abcd\r","alo\r"] :: [[Char]] -- Same as [String]
remplacer          :: Char -> [Char] -> [Char]

注意 remplacer 使用 Char,而不是 [Char]。 但是單獨用 '\r' 替換 "\r" 是行不通的,因為這樣我們就制作了 map remplacer 的第一個參數和第二個 '\r',換句話說((map remplacer) '\r') 這不會進行類型檢查。 我們想要的是讓ramplacer '\r'成為第一個參數:

λ> map (remplacer '\r') ["abcd\r","alo\r"]
["abcd ","alo "]

編輯:我忍不住探索你的map remplacer ".."是如何工作的。 為了娛樂,檢查 function 有何不同:

λ> :t map remplacer "ab"
map remplacer "ab" :: [[Char] -> [Char]]
λ>  ($  "abc") <$> (map remplacer ['a', 'b'])
[" bc","a c"]

$只是\fa -> fa ,常規 function 應用程序。 原來的問答用了兩次map,這個用了三次map。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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