Ho un codice:Perché Seq.take in F # tiro System.OutOfMemoryException
seq {for i in [1 .. 100000000] -> i} |> Seq.take 100000;;
Real: 00:00:00.000, CPU: 00:00:00.000, GC gen0: 0, gen1: 0, gen2: 0
val it : seq<int> =
Error: Exception of type 'System.OutOfMemoryException' was thrown.
Questo codice si traduce in di memoria. Perché? E perché l'eccezione è stata calcolata dopo il tempo (dopo che l'operazione è stata completata)? AFAIK, i singoli elementi della sequenza sono calcolati solo come richiesto?
si forza la creazione di una lista prima di eseguire la sequenza. l'eliminazione delle parentesi quadre dovrebbe aiutare –