Kurso de Raku / Esencoj / Bazoj de funkcioj / Pli pri funkcioj / Exercises / Faktorialo kun multi-funkcioj

Solvo: Faktorialo kun multi-funkcioj

Ĉi tiu ekzerco temas denove pri faktorioj. Efektive, la tasko permesas al ni ilustri pli da trajtoj de Raku.

Kiam oni kalkulas faktorion komencante de la donita nombro kaj irante malsupren, vi devas halti kiam la nombro atingas 1. Kun multi-funkcioj, vi povas atingi tion per ekstraktado de la kazo kun $n == 1 al aparta multi-funkcio.

Kodo

Jen la solvo:

multi sub factorial(1)  { 1 }
multi sub factorial($n) { $n * factorial($n - 1) }

say factorial(@*ARGS[0].Int);

🦋 Trovu la programon en la dosiero factorial-with-multi-functions.raku.

Eligo

$ raku exercises/more-on-functions/factorial-with-multi-functions.raku 5
120

Komento

Notu, ke la eniga argumento estas eksplicite konvertita al entjero: @*ARGS[0].Int. Ĉi tio estas por eviti senfinan buklon kiam la eniga nombro estas 1. En ĉi tiu kazo, la tipo de parametro pasita al la funkcio factorial estas IntStr, kaj la unua multi-variaĵo ne povas kapti la vokon. Kontraste, kiam factorial(2 - 1) estas vokita rekursive, la argumento de la funkcio estas entjero, kio ebligas voki la unuan variaĵon.

Kursa navigado

Faktorialo kun multi-funkcioj   |   Enkonstruataj funkcioj por presado