diff options
-rw-r--r-- | src/gleam/list.gleam | 10 | ||||
-rw-r--r-- | test/gleam/list_test.gleam | 4 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam index 6977338..71f332a 100644 --- a/src/gleam/list.gleam +++ b/src/gleam/list.gleam @@ -167,7 +167,15 @@ pub fn is_empty(list: List(a)) -> Bool { pub fn contains(list: List(a), any elem: a) -> Bool { case list { [] -> False - [head, ..rest] -> head == elem || contains(rest, elem) + list -> do_contains(list, elem, False) + } +} + +fn do_contains(list: List(a), any elem: a, accumulator: Bool) -> Bool { + case list { + _ if accumulator == True -> True + [] -> accumulator + [head, ..rest] -> do_contains(rest, elem, head == elem || accumulator) } } diff --git a/test/gleam/list_test.gleam b/test/gleam/list_test.gleam index 190e49c..fdef00f 100644 --- a/test/gleam/list_test.gleam +++ b/test/gleam/list_test.gleam @@ -45,6 +45,10 @@ pub fn contains_test() { |> should.be_false list.contains([], 1) |> should.be_false + + list.repeat(0, 16999) + |> list.contains(1) + |> should.equal(False) } pub fn first_test() { |