help reescritura en estilo funcional
Estoy aprendiendo Scala como mi primer lenguaje funcional. Como uno de los problemas, estaba tratando de encontrar una forma funcional de generar la secuencia S hasta n lugares. S se define de modo que S (1) = 1 y S (x) = el número de veces que x aparece en la secuencia. (No recuerdo cómo se llama esto, pero lo he visto en los libros de programación antes).
En la práctica, la secuencia se ve así:
S = 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7 ...
Puedo generar esta secuencia con bastante facilidad en Scala usando un estilo imperativo como este:
def genSequence(numItems: Int) = {
require(numItems > 0, "numItems must be >= 1")
var list: List[Int] = List(1)
var seq_no = 2
var no = 2
var no_nos = 0
var num_made = 1
while(num_made < numItems) {
if(no_nos < seq_no) {
list = list :+ no
no_nos += 1
num_made += 1
} else if(no % 2 == 0) {
no += 1
no_nos = 0
} else {
no += 1
seq_no += 1
no_nos = 0
}
}
list
}
Pero realmente no tengo idea de cómo escribir esto sin usarvars
y el bucle while.
¡Gracias