删除List的元素(Haskell)

时间:2013-05-06 19:00:36

标签: haskell

我刚开始学习 Haskell

我有一个单词列表,必须

  1. 删除所有单词的首字母然后
  2. 删除所有以字母“a”开头的单词和
  3. 将剩余的单词放在一起。
  4. 我设法做了1和3,但无法弄清楚如何删除以“a”开头的单词

    到目前为止看起来像:

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

    谢谢Frerich Raabe,它有效

1 个答案:

答案 0 :(得分:7)

最好从另一个角度考虑它。您希望过滤列表,以便保留不以'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 = ...