Course of Raku / Essentials / More about functions / Exercises / Factorial with multi-functions
Solution: Factorial with multi-functions
This exercise is about factorials again. Indeed, the task allows us to illustrate more features of Raku.
When computing a factorial by starting from the given number and going downwards, you need to stop when the number gets 1. With multi-functions, you can achieve that by extracting the case with $n == 1
to a separate multi-function.
Code
Here is the solution:
multi sub factorial(1) { 1 }
multi sub factorial($n) { $n * factorial($n - 1) }
say factorial(@*ARGS[0].Int);
🦋 Find the program in the file factorial-with-multi-functions.raku.
Output
$ raku exercises/more-on-functions/factorial-with-multi-functions.raku 5
120
Comment
Note that the input argument is explicitly converted to an integer: @*ARGS[0].Int
. This is to prevent infinite loop when the input number is 1
. In this case, the type of parameter passed to the factorial
function is IntStr
, and the first multi-variant cannot catch the call. In contrast, when factorial(2 - 1)
is called recursively, the argument of the function is an integer, which makes it possible to call the first variant.
Course navigation
← Creating and calling functions / Default values | Built-in functions for printing →
Translations of this page: English • Deutsch • Español • Italiano • Latviešu • Nederlands • Български • Русский • Українська