首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何泛化这段代码,使其不仅适用于空格?

我如何泛化这段代码,使其不仅适用于空格?
EN

Stack Overflow用户
提问于 2020-09-15 06:55:04
回答 1查看 73关注 0票数 2

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

代码语言:javascript
复制
words' [] = []
words' str = before : words' (dropWhile isSpace after) where
    (before, after) = break isSpace str

我现在正在尝试推广它,这样如果我输入:

代码语言:javascript
复制
gWords'  "abcbdecefab" "ac" == ["b","bde","ef","b"]

代码语言:javascript
复制
gWords'  "abc(hjd(hj))jk)k" "()" == ["abc","hjd","hj","jk","k"]
EN

回答 1

Stack Overflow用户

发布于 2020-09-15 08:14:31

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

代码语言:javascript
复制
wordsBy _ [] = []
wordsBy isbrk str = before : wordsBy isbrk (dropWhile isbrk after) where
    (before, after) = break isbrk str

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

代码语言:javascript
复制
gwords' str brks = wordsBy (`elem` brks) str

要解释上面的谓词:

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

elem e brks

  • Haskell有另一种中缀格式,将函数视为运算符:

E elem brks === elem e brks

  • Haskell也有一个“切片”符号来部分应用运算符;你可以把它看作是常用的lambda形式的简写:

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

这将为您提供所需的谓词:对字符串brks中的字符返回true的谓词。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63892789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档