高階関数版 filter’

下のエントリは前段でこっちが本題。id:hyukiさんとこにコメントをつけたんだけど,忘れないようにこっちにも書いておく。

filter' f xs = foldr (\m n -> if f m then m:n else n) [] xs

結果。

*Main> take 50 $ filter' odd [1..]
[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,
57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99]

major

リスト中に,関数 f(述語って言うの?)を満たす要素のほうが多ければ True をかえす,というのを考えた。all と any の中間みたいなもの。

major f xs = (length $ filter f xs) > (length $ filter (not . f) xs)

結果。

*Main> major odd [1..5]
True
*Main> major even [1..5]
False

地道に数を数えるならこうかな。

major f xs = fst count > snd count
  where count = foldl (\(ct, cf) x -> if f x then (ct+1, cf) else (ct, cf+1)) (0,0) xs
*Main> major odd [1..5]
True
*Main> major even [1..5]
False

はてなグループとコメントについて

id:takatoh:20060604:group についた hyuki さんのコメント。

参加ありがとうございます。ところで、コメントつけるときに「グループに参加」というのはどういう状況でしたか?いちおう誰で も書き込めるようになっていたはずですが…。

たぶん,はてなにログインした状態でコメントしようとしたので,グループに参加するよう促されたのではないかと思います。回避する方法があったのかもしれませんが,別段,断る理由もなかったのでそのまま参加しました。

ところが。

つけたコメントの,名前の部分がリンクになってるんですが,そのリンク先がここじゃなくて Haskellグループ内の日記(使ってないのでカラ)になってしまってます。これはどうしたらいいんだろう。時間があいたら調べてみます。