typestar

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

  1. let rec count_animals acc pliega a mano, sin riesgo de pila.
  2. function matchea el argumento de lista directo.
  3. and une definiciones mutuamente recursivas.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 3 en Idiomas del lenguaje; paso 26 de 29 en Fundamentos del lenguaje.

← Anterior Siguiente →