您好我正在尝试将正则表达式与a匹配FilePath来过滤我的文件列表
import Text.Regex.Posix
import System.FilePath
escapePath path = foldr (&&) True $ map (\pat -> not $ (path =~ pat :: Bool)) patterns
where
patterns = ["\\.", "\\.\\.", {-- So on --}]
Run Code Online (Sandbox Code Playgroud)
我相信map并folds会在返回值之前遍历完整列表.
做这样的事我可以避免使用折叠
escapePath path = not $ elem True (map (\pat -> (path =~ pat :: Bool)) patterns)
where
patterns = ["\\.", "\\.\\.", {-- continued --}]
Run Code Online (Sandbox Code Playgroud)
但在搜索值之前,我仍会匹配所有模式的路径
如何通过在第一次匹配时返回值来提高函数效率?
我相信
map并且fold在返回值之前,s会遍历完整列表.
嘿,伟大的,可证伪的假设,科学的基石!让我们做一个试验来伪造它的实验.对于任何值foo,foo:undefined完全遍历列表将引发异常.
> head (map id (True:undefined))
True
> foldr (&&) True (False:undefined)
False
Run Code Online (Sandbox Code Playgroud)