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
middlefunciona igual en listas de strings y de ints.- El retorno option admite con honestidad la lista vacía.
swap (a, b)es polimórfico en ambas casillas.
Palabras clave y builtins usados aquí
inletmatchwith
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.
Paso 3 de 3 en Tipos; paso 17 de 29 en Fundamentos del lenguaje.