17

私はHaskellを初めて使用し、リスト内の各個別の値の頻度を計算するためにリスト内包表記を書き込もうとしていますが、最後の部分で問題が発生しています。

これまでのところ私はこれを持っています:

frequency :: Eq a => [a] -> [(Int,a)] 
frequency list = [(count y list,y) | y <- rmdups ]

rmdupsを含む最後の部分に問題があります。

count関数は、文字を取得してから文字のリストを取得し、その文字が出現する頻度を示します。コードは次のとおりです。

count :: Eq a => a -> [a] -> Int
count x [] = 0
count x (y:ys) | x==y = 1+(count x ys)
               | otherwise = count x ys

前もって感謝します。

4

7 に答える 7

15

の使用のためOrd、代わりに使用する必要がありましたEqsort

frequency :: Ord a => [a] -> [(Int,a)] 
frequency list = map (\l -> (length l, head l)) (group (sort list))
于 2012-05-01T14:08:22.860 に答える
5

rmdupsタイプがあると仮定します

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

次に、そのパラメーターがありません。

frequency :: Eq a => [a] -> [(Int,a)] 
frequency list = [(count y list,y) | y <- rmdups list]

しかし、あなたが得ているエラーは診断に役立ちます。

于 2012-05-01T14:12:10.143 に答える
1

あなたのrmdups機能はちょうどnubからData.Listです。

于 2012-05-01T14:02:17.327 に答える