私にはかなり些細な仕事がありますが、ソリューションをより美しくする方法がわかりません。
目標はList
、述語に合格したかどうかに基づいて、結果を取得して返すことです。結果をグループ化する必要があります。簡単な例を次に示します。
述語:isEven
Inp : [2; 4; 3; 7; 6; 10; 4; 5]
Out: [[^^^^]......[^^^^^^^^]..]
これが私がこれまでに持っているコードです:
let f p ls =
List.foldBack
(fun el (xs, ys) -> if p el then (el::xs, ys) else ([], xs::ys))
ls ([], [])
|> List.Cons // (1)
|> List.filter (not << List.isEmpty) // (2)
let even x = x % 2 = 0
let ret =
[2; 4; 3; 7; 6; 10; 4; 5]
|> f even
// expected [[2; 4]; [6; 10; 4]]
このコードはそれほど読みにくいようです。また、(1)と(2)の行は好きではありません。より良い解決策はありますか?