【问题标题】:Deleting elements of a List (Haskell)删除列表的元素 (Haskell)
【发布时间】:2013-05-06 19:00:35
【问题描述】:

我刚开始学习 Haskell

我有一个单词列表并且必须

  1. 然后删除所有单词的首字母
  2. 删除所有以字母“a”开头的单词,并且
  3. 把剩下的单词放在一起。

我设法做到了 1 和 3,但不知道如何删除以“a”开头的单词

到目前为止它看起来像:

concat(--remove words with a--(map (drop 1) ["Tree","House","Monkey","Haskell","Informatik"]))

谢谢 Frerich Raabe,它有效

【问题讨论】:

  • filter!! 可能有用。
  • 如果!!,您可能更喜欢head。不要忘记 - 字符串只是一个字符列表。
  • 如果不为您做功课,很难更具体。
  • !!head 在这种情况下都是不好的建议。单字母单词在第1步后变成"",那么!!/head就会报错。
  • take 1 可以替换 head 例如。无论如何,这个问题看起来与one 非常相似

标签: haskell


【解决方案1】:

最好换个角度想。您想要过滤列表,以便保留不以'a' 开头的单词。您可以使用标准函数 filter 来执行此操作。

filter :: (a -> Bool) -> [a] -> [a]

filter 的第一个参数是一个函数,它应该返回 True 用于您要保留的单词,False 用于您要删除的单词,第二个参数是您的列表。

filter doesNotBeginWithA (... your list goes here ...)

现在你必须实现这个功能。您可以使用简单的模式匹配来做到这一点。

doesNotBeginWithA :: String -> Bool
doesNotBeginWithA xs = ...

如果您熟悉函数组合,则使用not 来反转您的逻辑会稍微习惯一些。你也可以概括一下:

filter (not . beginsWith 'a') (...)

现在你必须提供这个函数:

beginsWith :: Char -> String -> Bool
beginsWith c xs = ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    相关资源
    最近更新 更多