从 Haskell 中的字符串列表中删除字符串

Phi*_*rip 5 string haskell

我有一个关于 Haskell 的问题一直困扰着我。我目前需要编写一个函数来删除字符串,即"word"从字符串列表中["hi", "today", "word", "Word", "WORD"]返回 list ["hi", "today", "Word", "WORD"]。我无法使用任何高阶函数,只能诉诸原始递归。

考虑到这个问题,我想也许我可以通过使用递归来解决它,在该递归中搜索第一个字符串的头部,如果匹配,"w"则比较尾部的下一个头部,看看是否匹配"o"。但后来我很快意识到,完成所有这些工作后,您将无法删除完整的字符串"word"

我的问题实际上是如何比较列表中的整个字符串,而不是一次只比较 1 个元素,例如:removeWord (x:xs)。有可能吗?我是否必须编写一个辅助函数来帮助解决问题?

ick*_*fay 3

考虑基本情况:从空列表中删除一个单词将是空列表。这可以简单地写成这样:

removeWord [] _ = []
Run Code Online (Sandbox Code Playgroud)

现在考虑列表不为空的情况。您其与 相匹配x:xs。您可以使用守卫在这两个条件之间进行选择:

  1. x是您要删除的单词。( x == word)
  2. x不是您要删除的单词。( otherwise)

  • @Phirip:`“Hi”`是`[“Hi”,“word”]`的第一个元素。“H”是“Hi”的第一个元素。`'H'` 将是 `["Hi", "word"]` 第一个元素*的第一个元素,而 `:` 只向下一级。 (2认同)