3

リスト [String] があります。このタスクは、リスト内の「q」または「p」を含む要素を削除し、toUpper を使用してリスト内のすべての文字を大文字にすることです。

私がまだ試したことは次のとおりです。

delAndUpper :: [String] -> [String]
delAndUpper myList = filter (\x -> not('p' `elem` x || 'q' `elem` x)) myList

リストから不要な要素を適切に削除しますが、toUpper のタイプが Char であるため、このリストに toUpper を適用できません。

マップで試してみましたが、うまくいきません。

delAndUpper myList = map toUpper (filter (\x -> not('p' `elem` x || 'q' `elem` x)) myList)

このコード行の toUpper はリストを値として取得するため機能しないことはわかっていますが、リストのレベルを下げてマップ toUpper を適用する方法は知っています。

手伝っていただけませんか。

前もって感謝します!

ご挨拶

4

3 に答える 3

3

このコード行の toUpper はリストを値として取得するため機能しないことはわかっていますが、リストのレベルを下げてマップ toUpper を適用する方法は知っています。

(map . map)の代わりに使用しmapます。

nbは、他の回答で示唆されているもの(map . map) toUpperと同じです。map (map toUpper)個人的には、より明確だと思うので、それについて言及します。適用するために2つのレベルが下がっているように見えるtoUpper. (関数合成演算子に慣れていないかもしれません(.)。必要に応じて調べるか、質問してください。)

、、などの同様のタイプ ( (a -> b) -> something a -> something b)を持つ他の関数は、互いに、また同様の方法で組み合わせることができます。fmapData.Map.mapfirstsecondmap

(map . map) toUpperおそらく、あなたはより明確に見つけられないでしょうmap (map toUpper); けっこうだ。

于 2013-05-06T18:12:13.730 に答える