コレクションに対してkeepとdiscardの操作を実装します。
コレクションと、その要素に対する述語が与えられたとき、keepは述語が真になる要素だけを含む新しいコレクションを返し、discardは述語が偽になる要素だけを含む新しいコレクションを返します。
たとえば、次のような数値のコレクションがあるとします。
そして、次のような述語です。
このとき、keepの操作は次の結果を返します。
一方、discardの操作は次の結果を返します。
keepとdiscardの和集合が、すべての要素になることに注意してください。
これらの関数はkeepとdiscardという名前で呼び出すこともできますが、お使いの言語にある既存の関数や概念と衝突しないように、別の名前にする必要があるかもしれません。
標準ライブラリが提供しているfilterやrejectなど、あの手の機能には手を出さないでください! 代わりに、ほかの基本的な道具を使って自力で解いてみましょう。