diff options
author | inoas <mail@inoas.com> | 2022-06-25 16:40:51 +0200 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2022-07-03 22:10:45 +0100 |
commit | e8030bb1131bafbf2a5db3ab978c431cd84616fc (patch) | |
tree | 4d0766996273eba7e24b81153178b37f91a27687 | |
parent | cddb0ff3ed01f0ff13d6f98085a41b1d0866f6ad (diff) | |
download | gleam_stdlib-e8030bb1131bafbf2a5db3ab978c431cd84616fc.tar.gz gleam_stdlib-e8030bb1131bafbf2a5db3ab978c431cd84616fc.zip |
add fix for List.any
-rw-r--r-- | src/gleam/list.gleam | 14 | ||||
-rw-r--r-- | test/gleam/list_test.gleam | 8 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index 8beeeb9..50c7565 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -829,7 +829,19 @@ fn all_tail_recursive( pub fn any(in list: List(a), satisfying predicate: fn(a) -> Bool) -> Bool { case list { [] -> False - [x, ..rest] -> predicate(x) || any(rest, predicate) + list -> any_tail_recursive(list, predicate, False) + } +} + +fn any_tail_recursive( + list: List(a), + predicate: fn(a) -> Bool, + accumulator: Bool, +) -> Bool { + case list { + [] -> accumulator + [x, ..rest] -> + any_tail_recursive(rest, predicate, accumulator || predicate(x)) } } diff --git a/test/gleam/list_test.gleam b/test/gleam/list_test.gleam index 869bcf6..bde753a 100644 --- a/test/gleam/list_test.gleam +++ b/test/gleam/list_test.gleam @@ -301,6 +301,10 @@ pub fn all_test() { list.all([], fn(_) { False }) |> should.equal(True) + list.repeat(False, 16999) + |> list.all(fn(_item) { False }) + |> should.equal(False) + list.repeat(True, 16999) |> list.all(fn(_item) { True }) |> should.equal(True) @@ -319,6 +323,10 @@ pub fn any_test() { list.repeat(True, 16999) |> list.any(fn(_item) { True }) |> should.equal(True) + + list.repeat(False, 16999) + |> list.any(fn(_item) { False }) + |> should.equal(False) } pub fn zip_test() { |