1.概略
Lispを使っている頃、filterという関数もよく利用した。この関数は、与えられたリストから、条件を満たしたものだけをリストとして出力する。mapと同じように、第一引数は関数であり、第二引数はリストである。
2.例題
問題:自然数のリストから、偶数だけを取り出す。
これは次のようにプログラムできる。
Prelude> take 10 $ filter (\ x -> mod x 2 == 0) [1,2..] [2,4,6,8,10,12,14,16,18,20]
あるいは次のようにしてもよい。
take 10 $ filter even [1,2..] [2,4,6,8,10,12,14,16,18,20]
3.問題
filterを用いて次の問題の解を求めなさい。
問題1:文字のリストからブランクを取り除く。
問題2:文字のリストから文字’a’を取り除く。
問題3:数のリストから3の倍数を取り除く。
問題4:文字のリストから大文字を取り除く。
問題5:文字のリストから、2あるいは3の倍数を取り除く。
問題6:数と文字の対を要素とするリストから、例えば[(3,’s’), (36,’d’),…]、その数が10以上である対を取り除く。
問題7:苗字のリストから”Tanaka”を取り除く。
問題8:苗字のリストから文字’S’で始まる苗字を取り除く。
問題9:苗字と成績(100点満点)の対を要素とするリストから、成績が80点以上の対を取り出す。
問題10:苗字と数学と英語の成績(それぞれ100点満点)のタプルから、合計点が100点未満のタプルを取り出す。