【问题标题】:Haskell recursively removing chars using helper functionHaskell 使用辅助函数递归删除字符
【发布时间】:2016-02-09 10:43:00
【问题描述】:

我有一个函数定义如下:

rmCharsRec :: String -> String -> String

我有一个辅助函数 rmChar 定义如下,它删除字符串中所有出现的字符:

rmChar :: Char -> String -> String

rmCharsRec 应该删除第一个字符串和第二个字符串中每个字符的所有出现并返回响应。

我尝试了以下方法:

rmCharsRec :: String -> String -> String
rmCharsRec _ "" = ""
rmCharsRec c:chars str = rmChar ( c str ) ++ rmCharsRec chars

但它似乎不起作用。我总是收到以下错误:

file.hs:140:1: Parse error in pattern: rmCharsRec

**这不是作业问题*。我只是想从一组练习中学习 Haskell,但我一直坚持这一点,因为我不明白为什么会出错。

有人可以告诉我我的代码有什么问题吗?

【问题讨论】:

  • 提示:使用foldl 遍历即将删除的字符。
  • 我将在下一个练习中使用 foldl。我想通过自己实现递归并使用 foldl 或 foldr 来查看差异:) 感谢您的提示

标签: string haskell recursion ghci


【解决方案1】:

如果你想写一个像c:chars这样的模式,你需要像这样在括号中放入:

rmCharsRec (c:chars) str = ...

这将解决您提到的错误消息,尽管我认为这不是您需要处理的唯一问题。

【讨论】:

  • 确实如此。我刚刚看到我忘记了(c:chars)。你说的对。看来我的 bug 也比这个多。
  • 我会将您的答案标记为正确答案,因为您为我的错误提供了答案。再次感谢
【解决方案2】:

您忘记在模式匹配中为 c:chars 设置括号。

【讨论】:

    猜你喜欢
    • 2019-06-12
    • 2021-01-03
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多