今日も問題を

今日も問題をといてみます。
今日の問題はこちら

ちょっと考えすぎて時間がなくなってしまったので、課題1、2それぞれ片方のみやってみます。もう一方のやりかたは別の日にでも。
ソースはこちら。

hasko$ cat kougaku2.hs
maxOccursList l = ( maxis l , howMany (maxis l) l )
        where   maxis l = foldr1 max l
                howMany m l = length [ n | n <- l, m == n]
myunique  = 
myunique (x:xs)
        | elem x xs == True = myunique (filter (\n -> x /= n) xs)
        | otherwise         = x : myunique xs

myuniqueの中で、filterが返すリストに対して再帰をさせるのを忘れはまってしまいました。
ちなみに、filterは、関数とリストをとり、リスト中の要素が関数で真になるもののみをとりだしリストをつくる、文字どおりのフィルターです。elemは、最初の引数のものが、第二引数のリストに存在するかを調べる関数です。
それでは、実行結果。

Main> maxOccursList [3,2,5,2,4,5,2]
(5,2)
Main> myunique [3,2,5,2,4,5,2]
[3,4]

maxOccursListはすんなりできたけど、uniqueの方は、ちょっとてこずってしまいました。まだまだ勉強不足と慣れが足りないようです。