aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2020-09-02 22:49:29 +0100
committerLouis Pilfold <louis@lpil.uk>2020-09-02 22:50:32 +0100
commitc5845fa29b5059739b6f7a5b0c7da21e752de4fa (patch)
tree08cf40c33b1c34fb0c884e3744ccded440989213 /src
parent38197b4948e212404661468b0ebd2afacf7452ba (diff)
downloadgleam_stdlib-c5845fa29b5059739b6f7a5b0c7da21e752de4fa.tar.gz
gleam_stdlib-c5845fa29b5059739b6f7a5b0c7da21e752de4fa.zip
list.partition
Diffstat (limited to 'src')
-rw-r--r--src/gleam/list.gleam18
1 files changed, 18 insertions, 0 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam
index d9296da..4ca39f4 100644
--- a/src/gleam/list.gleam
+++ b/src/gleam/list.gleam
@@ -1034,3 +1034,21 @@ pub fn each(list: List(a), f: fn(a) -> b) -> Nil {
}
}
}
+
+pub fn partition(
+ list: List(a),
+ with categorise: fn(a) -> Bool,
+) -> tuple(List(a), List(a)) {
+ do_partition(list, categorise, [], [])
+}
+
+fn do_partition(list, categorise, trues, falses) {
+ case list {
+ [] -> tuple(reverse(trues), reverse(falses))
+ [x, ..xs] ->
+ case categorise(x) {
+ True -> do_partition(xs, categorise, [x, ..trues], falses)
+ False -> do_partition(xs, categorise, trues, [x, ..falses])
+ }
+ }
+}