From f92661980deac22b54e79cd44c25caba17910c95 Mon Sep 17 00:00:00 2001 From: Louis Pilfold Date: Thu, 18 Jan 2024 16:44:27 +0000 Subject: Last of the content! --- .../lesson02_tail_calls/code.gleam | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/content/chapter1_functions/lesson02_tail_calls/code.gleam (limited to 'src/content/chapter1_functions/lesson02_tail_calls/code.gleam') diff --git a/src/content/chapter1_functions/lesson02_tail_calls/code.gleam b/src/content/chapter1_functions/lesson02_tail_calls/code.gleam new file mode 100644 index 0000000..d823eec --- /dev/null +++ b/src/content/chapter1_functions/lesson02_tail_calls/code.gleam @@ -0,0 +1,21 @@ +import gleam/io + +pub fn main() { + io.debug(factorial(5)) + io.debug(factorial(7)) +} + +pub fn factorial(x: Int) -> Int { + // The public function calls the private tail recursive function + factorial_loop(x, 1) +} + +fn factorial_loop(x: Int, accumulator: Int) -> Int { + case x { + 1 -> accumulator + + // The last thing this function does is call itself + // In the previous lesson the last thing it did was multiple two ints + _ -> factorial_loop(x - 1, accumulator * x) + } +} -- cgit v1.2.3