typestar

Polimorfismo en OCaml

'a es cualquier tipo: una función, verificada una vez, reusada siempre.

(* 'a is any type: one function, checked once, reused everywhere. *)
let middle lst =
  match lst with
  | [] -> None
  | _ -> Some (List.nth lst (List.length lst / 2))

(* A polymorphic variant of pairs works on any payload. *)
let swap (a, b) = (b, a)

let () =
  (match middle ["ebb"; "slack"; "flood"] with
   | Some phase -> print_endline ("Middle phase: " ^ phase)
   | None -> print_endline "empty tide table");
  (match middle [3; 14; 15; 92] with
   | Some n -> Printf.printf "Middle reading: %d\n" n
   | None -> print_endline "no readings");
  let hi, lo = swap (2, 9) in
  Printf.printf "Swapped: %d %d\n" hi lo

Cómo funciona

  1. middle funciona igual en listas de strings y de ints.
  2. El retorno option admite con honestidad la lista vacía.
  3. swap (a, b) es polimórfico en ambas casillas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
18
Caracteres a escribir
597
Tokens
144
Ritmo de tres estrellas
65 tpm

Al ritmo de tres estrellas de 65 tokens por minuto, este intento toma unos 133 segundos.

Escribe este fragmento

Paso 3 de 3 en Tipos; paso 17 de 29 en Fundamentos del lenguaje.

← Anterior Siguiente →