Recursión en OCaml
rec permite la autorreferencia; los acumuladores dejan la llamada en cola.
(* rec allows self-reference; an accumulator keeps the call a tail. *)
let rec count_animals acc = function
| [] -> acc
| n :: rest -> count_animals (acc + n) rest
(* Mutual recursion joins definitions with and. *)
let rec ebbs n = if n = 0 then "slack" else flows (n - 1)
and flows n = if n = 0 then "running" else ebbs (n - 1)
let () =
Printf.printf "Survey total: %d\n" (count_animals 0 [12; 5; 31]);
Printf.printf "Tide after 6 turns: %s\n" (ebbs 6);
Printf.printf "Tide after 7 turns: %s\n" (ebbs 7)
Cómo funciona
let rec count_animals accpliega a mano, sin riesgo de pila.functionmatchea el argumento de lista directo.andune definiciones mutuamente recursivas.
Palabras clave y builtins usados aquí
andelsefunctionifletrecthen
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 506
- Tokens
- 112
- Ritmo de tres estrellas
- 65 tpm
Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 103 segundos.
Paso 3 de 3 en Idiomas del lenguaje; paso 26 de 29 en Fundamentos del lenguaje.