From f4ff3b795e105e216c1a3b4d9b350f06533e1927 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Mon, 25 Jul 2022 22:16:59 +0100 Subject: Make list.range tail recursive --- src/gleam/list.gleam | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src') 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]) } } -- cgit v1.2.3