[英]Filtering odd length strings from a list of strings
我正在解決這個問題:使用 map、filter 和 (.)(函數組合運算符),定義一個檢查字符串列表的函數,只保留那些長度為奇數的字符串,將它們轉換為大寫字母,並連接結果生成單個字符串。
我知道我可以通過列表理解來做到這一點,但我已經明確指示使用過濾器。 現在,我的代碼如下所示:
concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings [] = ""
concatenateAndUpcaseOddLengthStrings xs = filter (\x -> length x `mod` 2 == 1) xs
我收到此錯誤:無法匹配類型 '[Char]' 與 'Char' 預期類型:字符串實際類型:[[Char]]
我正在添加其他組件之前測試過濾器功能,但我無法克服此錯誤。 有任何想法嗎?
產生錯誤的原因是filter (…) xs
表達式將返回一個字符串列表,而不是單個字符串。 但是您的類型簽名指定:
concatenateAndUpcaseOddLengthStrings :: [String] -> String
所以它需要一個String
,而不是一個[String]
。 您可以在此處使用concat :: [[a]] -> [a]
來連接字符串:
concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings xs = concat (filter (odd . length) xs)
甚至更短:
concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings = concat . filter (odd . length)
但是,您仍然需要實現這樣一個事實,即它會將保留的字符串中的字符轉換為它們的大寫變體。 我把它留作練習。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.