In Scala, si utilizza spesso un iteratore per fare un loop for
in un ordine crescente come:Scala verso il basso o decrescente per loop?
for(i <- 1 to 10){ code }
Come si dovrebbe fare in modo che va da 10 a 1? Immagino che 10 to 1
dia un iteratore vuoto (come la solita matematica della gamma)?
Ho creato uno script di Scala che lo risolve richiamando l'inverso sull'iteratore, ma non è bello secondo me, la seguente è la strada da seguire?
def nBeers(n:Int) = n match {
case 0 => ("No more bottles of beer on the wall, no more bottles of beer." +
"\nGo to the store and buy some more, " +
"99 bottles of beer on the wall.\n")
case _ => (n + " bottles of beer on the wall, " + n +
" bottles of beer.\n" +
"Take one down and pass it around, " +
(if((n-1)==0)
"no more"
else
(n-1)) +
" bottles of beer on the wall.\n")
}
for(b <- (0 to 99).reverse)
println(nBeers(b))
@Felix: prego. Avrei anche dovuto notare che c'è anche 'until' che puoi usare al posto di' to' per escludere il punto finale della mano destra dall'intervallo. L'endpoint di sinistra è sempre incluso. –
Sapevo già fino a quando, fino a quando è anche una funzione su Interi, tuttavia, "per" deve essere una funzione sull'intervallo/iteratore, qualsiasi cosa sia restituito dalle funzioni "a" e "fino a". Grazie comunque :) – Felix
La risposta di Randall è la migliore, ma penso che "Range.inclusive (10, 1, -1)" meriti di essere menzionato. –