¿Por qué no hay List.skip y List.take? Por supuesto, hay Seq.take y Seq.skip, pero no crean listas como resultado.¿Por qué no hay List.skip y List.take?
Una posible solución es: mylist |> Seq.skip N |> Seq.toList Pero esto crea el primer enumerador y luego una nueva lista de ese enumerador. Creo que podría haber una forma más directa de crear una lista inmutable a partir de una lista inmutable. Como no hay copia de elementos internamente, solo hay referencias de la nueva lista a la original.
Otra solución posible (sin lanzar excepciones) es:
let rec listSkip n xs =
match (n, xs) with
| 0, _ -> xs
| _, [] -> []
| n, _::xs -> listSkip (n-1) xs
Pero esto todavía no responde a la pregunta ...
'List.skip' no necesitaría crear una nueva lista, pero' List.take' lo haría. – Benjol
¡Tienes toda la razón! –