2013-05-06 193 views
0

我剛開始學習Haskell刪除列表元素(Haskell)

我有一個單詞列表,並有

  1. 刪除所有單詞的第一個字母,然後
  2. 刪除以字母「A」開頭的單詞,並
  3. 把剩下的詞一起。

我能夠做到1和3,但無法弄清楚如何刪除與啓動字的「一」

到目前爲止,它看起來像:

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

謝謝Frerich拉貝,它的工作原理

+4

'filter'和''!可能是有用的。 – chirlu 2013-05-06 19:09:19

+2

相反,如果'!!',你可能更喜歡'頭'。別忘了 - 一個字符串只是一個字符列表。 – Steve314 2013-05-06 19:16:25

+0

你能更具體嗎? 如何過濾出單詞? – user2355793 2013-05-06 19:17:24

回答

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 = ...