2016-04-21 12 views
-2

は、リストから重複を削除する機能次のようなhaskellコードを高次関数にどのように変更しますか?

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

を定義します。たとえば、rmdups "ababca"は ​​を返します。 これは動作します:

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

これは動作しません、私が間違って何をやっている:

出力リストの要素の順序は、ここで

は、私がこれまでに行ったことある重要ではありません

import Data.List (nub) 
rmdups = nub 

しかし、私はあなたがalloweていないことを前提としています

rmdups = map head . group . sort 
+0

これは、あなたが指定した例で動作します。それがうまくいかない例は何ですか? –

+0

最後のコード行は機能しません。コンパイラはグループが範囲にないと言います。 –

+1

ああ、baxbaxwalanuksiweが言っているように、あなたは '輸入 'が不足しているからです。今後の質問では、取得しているエラーメッセージを含める必要があります。 –

答えて

2

あなたはこれを行うことができますd。

それ以外の場合は、解決策(rmdups = map head . group . sort)が有効です。

If the compiler says group or sort not in scopeData.Listからインポートするだけです。

PS:thatアウトを指してくれてありがとうuser3217013:私は、あなたが「ポイントフリースタイル」ではなく、「高階関数」

編集を意味信じています。

+1

あなたはまた、何らかの理由で 'sort'のために' Data.List'が必要です。 – Emil

+0

あなたの答えをありがとう、しかし、あなたが言ったように、私はそれを行うことは許されていません。高次関数を使用して、問題を解決する他の方法はありますか? –

+0

なぜあなたはそれを許可されていませんか?私の解決法(あなたのものです)は高次関数 'map'を使います。 – baxbaxwalanuksiwe

関連する問題