Seq en OCaml
La secuencia perezosa: infinita hasta que algo tira.
(* Seq is the lazy sequence: infinite until something pulls. *)
let tides = Seq.ints 1 |> Seq.map (fun n -> n * 6 mod 24)
let () =
tides
|> Seq.take 4
|> Seq.iter (Printf.printf "Low tide near %02d:00\n");
(* unfold grows a sequence from state until None stops it. *)
let draining = Seq.unfold
(fun cm -> if cm <= 0 then None else Some (cm, cm - 15)) 60 in
draining
|> Seq.map string_of_int
|> List.of_seq
|> String.concat " > "
|> Printf.printf "Pool draining: %s cm\n"
Cómo funciona
Seq.ints 1nunca termina;Seq.take 4decide qué corre.Seq.unfoldcrece desde el estado hasta que None frena.List.of_seqmaterializa cuando la pereza terminó.
Palabras clave y builtins usados aquí
elsefunifinletthen
El intento, en números
- Líneas
- 16
- Caracteres a escribir
- 472
- Tokens
- 111
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 111 segundos.
Paso 3 de 4 en Colecciones; paso 20 de 29 en Fundamentos del lenguaje.