如何概括此代码,使其不仅适用于空格?



我做了这个函数,它的工作方式与 Haskell 中的words相同,

words' [] = []
words' str = before : words' (dropWhile isSpace after) where
(before, after) = break isSpace str

我现在正在尝试概括它,以便如果我输入:

gWords'  "abcbdecefab" "ac" == ["b","bde","ef","b"]

gWords'  "abc(hjd(hj))jk)k" "()" == ["abc","hjd","hj","jk","k"]

惯用的Haskell是提供一个谓词(即布尔函数)作为参数:

wordsBy _ [] = []
wordsBy isbrk str = before : wordsBy isbrk (dropWhile isbrk after) where
(before, after) = break isbrk str

然后,您可以提供特定的谓词:

gwords' str brks = wordsBy (`elem` brks) str

解释上面的谓词:

  • 如果函数的第一个参数可以在作为其第二个参数提供的列表中找到,则该函数elem返回 true:

    elem e brks
    
  • Haskell有一个替代的中缀格式,将函数视为运算符:

    e `elem` brks  ===  elem e brks
    
  • Haskell还有一个"slice"符号来部分应用运算符;你可以把它看作是常用lambda形式的简写:

    (`elem` brks)  ===  ( e -> e `elem` brks)
    

这为您提供了所需的谓词:一个为字符串中的字符返回 true 的谓词brks.

相关内容

最新更新