检查路径是否与任何正则表达式匹配而不通过完整列表

Aji*_*jit 0 haskell

您好我正在尝试将正则表达式与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)

我相信mapfolds会在返回值之前遍历完整列表.

做这样的事我可以避免使用折叠

escapePath path = not $ elem True (map (\pat -> (path =~ pat :: Bool)) patterns)
                    where
                       patterns = ["\\.",  "\\.\\.", {-- continued --}]
Run Code Online (Sandbox Code Playgroud)

但在搜索值之前,我仍会匹配所有模式的路径

如何通过在第一次匹配时返回值来提高函数效率?

Dan*_*ner 6

我相信map并且fold在返回值之前,s会遍历完整列表.

嘿,伟大的,可证伪的假设,科学的基石!让我们做一个试验来伪造它的实验.对于任何值foo,foo:undefined完全遍历列表将引发异常.

> head (map id (True:undefined))
True
> foldr (&&) True (False:undefined)
False
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述