count :: Eq a => a -> [a] -> Int
count n [] = 0
count n (x:xs) | n == x = 1 + count n xs
| otherwise = count n xs
rmdups :: Eq a => [a] -> [a]
rmdups [ ] = [ ]
rmdups (x:xs) = x : rmdups (filter(/= x) xs)
2 つの関数を使用して、頻度と呼ばれる 3 番目の関数を作成する必要があります。これは、リスト内の各個別の値がそのリストで何回出現するかをカウントする必要があります。例: 頻度 "ababc" は、[(3,'a'),(2,'b'),(1,'c')] を返す必要があります。頻度のレイアウトは次のとおりです。
frequency :: Eq a => [a] -> [(Int, a)]
Ps rmdups、リストから重複を削除するため、rmdups "aaabc" = abc および count 2 [1,2,2,2,3] = 3.
これまでのところ、私は持っています:
frequency :: Eq a => [a] -> [(Int, a)]
frequency [] = []
frequency (x:xs) = (count x:xs, x) : frequency (rmdups xs)
しかし、これは部分的に存在します (間違っています)。ありがとう