リストを取り、ブール値を与える関数を適用し、リストを2つのリストに分けて1つのタプルを作成する関数を作成しようとしています。
たとえば、私が別の式を持っていたとしodd [1,2,3,4,5]
ます。出力が得られます([1,3,5],[2,4])
。
これまでの私のコードは次のとおりです。
separate:: (a->Bool) -> [a] -> ([a], [a])
separate func [] = ([], [])
separate func [x] = if(func x == True) then ([x], []) else ([], [x])
separate func (x:xs) = if(func x == True) then (x : (fork func xs), []) else ([], x : (fork func xs))
空リストと単一リストの最初の 2 つの部分は期待どおりに機能しますが、関数の実際の大部分は機能しません。式を再帰的に実行すると同時に、2 つの異なるリストを作成する方法がよくわかりません。
組み込みのフィルター機能とマップ機能も試してみましたが、実際には成功しませんでした。これをどのように達成できるかについて誰か提案があれば、私はそれを感謝します!