gpt4 book ai didi

haskell - 如何使用 Haskell 替换字符串中的多个单词?

转载 作者:行者123 更新时间:2023-12-02 17:00:21 26 4
gpt4 key购买 nike

假设我有一个要修改的字符串:

str = "I have several paints. For example, red, green, and blue." 

我想把它变成:我有几种颜料。例如,XXX、XXX 和蓝色。

所以我有一个单词列表可以用 XXX 替换:

colors = ["red", "green"]

我想替换 strcolors 中的颜色。这是我到目前为止所拥有的:

  • 首先,用“xxx”替换某些内容的函数:subColor pat str = subRegex (mkRegex pat) str "xxx"
  • 接下来,我尝试将其映射或将其折叠到颜色列表上。但我陷入困境:map只返回字符串的副本,每个副本都替换了一个单词,并且我在使用foldl时遇到了错误。我究竟做错了什么?

编辑:我还应该说,我有时会有多行单词,因此使用 words (如另一个类似问题的答案中所建议的)对我来说并不实际。

Edit2:我应该补充一点,一个大的正则表达式模式,比如 blue|red 可能也不适合我,因为我实际上有几千个这样的东西需要替换。

最佳答案

您想要的不是 map 多个 pat 并获取新 str 的列表,而是应用 subColor pat 为每个 pat 并组合这些函数并将其应用到 str:

subColors :: [String] -> String -> String
subColors pats str = foldMap (Endo . subColor) pats str

在上面的代码中,foldMap使用实例Monoid (Endo a),它与foldr (.) id相同。

而且,我仍然建议您尝试“一个大的正则表达式模式”解决方案,因为正则表达式引擎应该比您做更多的优化,但这取决于正则表达式引擎的实现,所以如果性能很重要,您需要先测试一下。

关于haskell - 如何使用 Haskell 替换字符串中的多个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57601887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com