Bil*_*lal 2 haskell loops module function block
这是我的代码:
x = ["Hello","Nice","WELCOME"]
y = "HELLO"
app x y = filter (isInfixOf (map to Lower y)) (map (map toLower) x)
Run Code Online (Sandbox Code Playgroud)
输出:应用程序 xy -> [“hello”]
我需要原始输出(“HELLO”),而不是不导入模块的较低输出。--
谢谢
您应该只map toLower
在过滤条件中,而不是对元素本身执行映射:
app :: [String] -> String -> [String]\napp xs y = filter (isInfixOf (map toLower y) . map toLower) xs
Run Code Online (Sandbox Code Playgroud)\ntoLower x == toLower y
但请注意,使用并不是进行不区分大小写匹配的好方法:某些字符没有大写/小写变体,并且以不区分大小写的方式匹配两个字符串的规则更加复杂。通常使用toCaseFold :: Text -> Text
规范化文本来进行区分大小写的匹配。例如:
ghci> map toLower "stra\xc3\x9fe" == map toLower "strasse"\nFalse\nghci> toCaseFold "stra\xc3\x9fe" == toCaseFold "strasse"\nTrue\n
Run Code Online (Sandbox Code Playgroud)\n