aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gleam/list.gleam10
-rw-r--r--test/gleam/list_test.gleam4
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() {