aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gleam/list.gleam10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/gleam/list.gleam b/src/gleam/list.gleam
index c787935..1a9d5ce 100644
--- a/src/gleam/list.gleam
+++ b/src/gleam/list.gleam
@@ -1048,10 +1048,14 @@ pub fn sort(list: List(a), by compare: fn(a, a) -> Order) -> List(a) {
/// ```
///
pub fn range(from start: Int, to stop: Int) -> List(Int) {
+ tail_recursive_range(start, stop, [])
+}
+
+fn tail_recursive_range(start: Int, stop: Int, acc: List(Int)) -> List(Int) {
case int.compare(start, stop) {
- order.Eq -> []
- order.Gt -> [start, ..range(start - 1, stop)]
- order.Lt -> [start, ..range(start + 1, stop)]
+ order.Eq -> reverse(acc)
+ order.Gt -> tail_recursive_range(start - 1, stop, [start, ..acc])
+ order.Lt -> tail_recursive_range(start + 1, stop, [start, ..acc])
}
}