Recursión en F#
rec permite la autorreferencia; el acumulador deja la llamada en cola.
// rec allows self-reference; an accumulator keeps the call a tail.
let rec countFrames acc hives =
match hives with
| [] -> acc
| frames :: rest -> countFrames (acc + frames) rest
printfn "Yard total: %d frames" (countFrames 0 [8; 10; 6; 9])
// Mutual recursion needs and: two functions defined together.
let rec isEvenDay n = if n = 0 then true else isOddDay (n - 1)
and isOddDay n = if n = 0 then false else isEvenDay (n - 1)
printfn "Day 12 even? %b" (isEvenDay 12)
printfn "Day 7 even? %b" (isEvenDay 7)
Cómo funciona
let rec countFrames acc hivespliega a mano.- La llamada recursiva es la última expresión — pila constante.
andune definiciones mutuamente recursivas.
Palabras clave y builtins usados aquí
elsefalseifletmatchthentruewith
El intento, en números
- Líneas
- 14
- Caracteres a escribir
- 511
- Tokens
- 95
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 88 segundos.
Paso 2 de 3 en Idiomas del lenguaje; paso 20 de 27 en Fundamentos del lenguaje.