Secuencias perezosas en F#
Lo infinito está bien hasta que algo tira.
// Sequences are lazy: infinite is fine until something pulls.
let broodCycles = Seq.initInfinite (fun day -> day * 21)
broodCycles
|> Seq.skip 1
|> Seq.take 4
|> Seq.iter (printfn "New workers on day %d")
// unfold grows a sequence from state until None says stop.
let syrup = Seq.unfold (fun left ->
if left <= 0.0 then None
else Some (left, left - 2.5)) 10.0
printfn "Feedings: %A" (syrup |> Seq.toList)
Cómo funciona
Seq.initInfinitedefine cada ciclo de cría de una vez.skipytakedeciden cuánto se computa de verdad.Seq.unfoldcrece desde el estado hasta que None frena.
Palabras clave y builtins usados aquí
elsefunifletthen
El intento, en números
- Líneas
- 13
- Caracteres a escribir
- 408
- Tokens
- 86
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 86 segundos.
Paso 3 de 3 en Firmas y pereza; paso 24 de 27 en Fundamentos del lenguaje.