1

我刚开始学习Haskell

我有一个单词列表,必须

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

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

到目前为止,它看起来像:

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

谢谢 Frerich Raabe,它有效

4

1 回答 1

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 = ...
于 2013-05-06T19:19:51.950 回答