所以我有一个字符串列表说[" test1"," test2"," test3"," exam1"],以及我想弄清楚哪些以" 1"或" 2"。 我知道我可以使用
map (isSuffixOf "1") ["test1", "test2", "test3", "exam1"]
map (isSuffixOf "2") ["test1", "test2", "test3", "exam1"]
得到两个不同的bool列表,但有什么方法可以同时测试两个?我试过这两个变种
map (isSuffixOf "1" || "2") ["test1", "test2", "test3", "exam1"]
map (isSuffixOf "1" || isSuffixOf "2") ["test1", "test2", "test3", "exam1"]
但他们都给了我一个错误
答案 0 :(得分:5)
您可以使用lambda表达式指定映射函数
map (\x -> isSuffixOf "1" x || isSuffixOf "2" x) ["test1", "test2", "test3", "exam1"]
或者,您可以使用Applicative
(->) a
实例来构建函数
map ((||) <$> isSuffixOf "1" <*> isSuffixOf "2") ["test1", "test2", "test3", "exam1"]
或使用liftA2
(在Control.Applicative
中找到)
map (liftA2 (||) (isSuffixOf "1") (isSuffixOf "2")) ["test1", "test2", "test3", "exam1"]
答案 1 :(得分:3)
你可以在这里使用箭头。
import Control.Arrow
f = isSuffixOf "1" &&& isSuffixOf "2"
result = map (uncurry (||)) . map f $ ["test1", "test2", "test3", "exam1"]
或者更简单地说,只需编写一个列表comp。
result = [isSuffix "1" x || isSuffix "2" x | x <- ["test1", "test2", "test3", "exam1"]]
或者更简单地说,自己写两个组合器。
anySuffixOf [] _ = False
anySuffixOf (x:xs) y = isSuffixOf x y || f xs y
result = map (anySuffixOf ["1", "2"]) ["test1", "test2", "test3", "exam1"]