Kurso de Raku / Esencoj / Pli pri funkcioj / Ekzercoj / 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.

Kurso navigado

Kreado kaj vokado de funkcioj / Defaŭltaj valoroj   |   Enkonstruataj funkcioj por presado

Ĉi tiu paĝo estas aŭtomate tradukita per ChatGPT 4o. Originala angla teksto

Tradukoj de ĉi tiu paĝo: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська