我有一个关于 Haskell 的问题一直困扰着我。我目前需要编写一个函数来删除字符串,即"word"从字符串列表中["hi", "today", "word", "Word", "WORD"]返回 list ["hi", "today", "Word", "WORD"]。我无法使用任何高阶函数,只能诉诸原始递归。
考虑到这个问题,我想也许我可以通过使用递归来解决它,在该递归中搜索第一个字符串的头部,如果匹配,"w"则比较尾部的下一个头部,看看是否匹配"o"。但后来我很快意识到,完成所有这些工作后,您将无法删除完整的字符串"word"。
我的问题实际上是如何比较列表中的整个字符串,而不是一次只比较 1 个元素,例如:removeWord (x:xs)。有可能吗?我是否必须编写一个辅助函数来帮助解决问题?
考虑基本情况:从空列表中删除一个单词将是空列表。这可以简单地写成这样:
removeWord [] _ = []
现在考虑列表不为空的情况。您将其与 相匹配x:xs。您可以使用守卫在这两个条件之间进行选择:
x是您要删除的单词。( x == word)x不是您要删除的单词。( otherwise)