2016-04-21 49 views
-2

定義一個函數如何將下列haskell代碼更改爲高階函數?

rmdups :: Eq a => [a] -> [a] 

,其從列表中刪除重複。例如,rmdups "ababca"應返回 ​​。在輸出列表中元素的順序並不重要

這是我迄今所做的: 這工作:

rmdups :: Eq a => [a] -> [a] 
rmdups [] = [] 
rmdups (x:xs) = x : rmdups (filter(/= x) xs) 

這是不行的,我在做什麼錯:

rmdups = map head . group . sort 
+0

它適用於你給出的例子。什麼是它不起作用的例子? –

+0

沒有最後一行代碼不起作用。編譯器說組不在範圍內。 –

+1

啊,因爲baxbaxwalanuksiwe說那是因爲你錯過了一個'import'。在將來的問題中,您應該包含您收到的任何錯誤消息。 –

回答

2

你可以這樣做:

import Data.List (nub) 
rmdups = nub 

但我認爲你不allowe d。

否則,您的解決方案(rmdups = map head . group . sort)適用於我。

If the compiler says group or sort not in scope,只需從Data.List導入。

PS:我相信你的意思是「點自由風格」,而不是「高階函數」

編輯:感謝user3217013指點that出來。

+1

可能的重複您還需要用'sort.'的'Data.List',因爲一些莫名其妙的原因。 – Emil

+0

謝謝你的回答,但正如你所說我不允許這樣做。有沒有其他方法可以解決這個問題,使用高階函數。 –

+0

你爲什麼不被允許這樣做?我的解決方案(實際上是你的)使用高階函數'map'。 – baxbaxwalanuksiwe