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