我有一个非常琐碎的任务,但我不知道如何使解决方案更漂亮。
目标是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) 行。有没有更好的解决方案?