Conjunto de longitud infinita en swift

Noté una cosa en Haskell que manejaba eficientemente el trabajo con una matriz de longitud infinita con gran facilidad.

¿Ser tan rápido progtwigdor, tengo curiosidad sobre cómo podemos lograr esto con rapidez?
Por ejemplo:

 var infiniteArray = [1,2,3,.............] 

Swift's Array almacena elementos concretos, evaluados con entusiasmo, por lo que no puede ser infinito (debido a la memory finita).

El equivalente Swift es una Sequence infinita. Aquí hay un ejemplo que produce una secuencia infinita de numbers naturales.

 let naturalNumbers = sequence(first: 0, next: { $0 + 1 }) let first5NaturalNumbers = Array(naturalNumbers.prefix(5)) print(first5NaturalNumbers) 

Utiliza la sequence(first:next:) function para producir un UnfoldSequence , que es una secuencia evaluada infinitamente larga y perezosa.

Haskell tiene una evaluación perezosa porque es un lenguaje completamente funcional (no tiene efectos secundarios, etc.), Swift no es un lenguaje funcional (aunque toma prestadas algunas funciones, funcionalidad y syntax) y no tiene las mismas características.

Dicho esto, puede usar Sequence y Generator para crear la printing de lists infinitas; consulte http://blog.scottlogic.com/2014/06/26/swift-sequences.html, por ejemplo. Por supuesto, la list no es realmente infinita, por cierto, la list de Haskell tampoco es infinita, simplemente almacena la function para crear nuevas inputs.

La principal diferencia es que en Haskell existen algunas optimizaciones de performance importantes debido a la falta de variables y efectos secundarios. En Swift no puedes hacer eso. Entonces tenga cuidado de traducir el código Haskell a Swift.

Si su intención de pasar un número desconocido de parameters a una function ( desde un punto de vista lógico, no puede decir "un número infinito de parameters" debido a la limitación de la memory de la máquina ), se denomina parámetro variadic :

Un parámetro variadic acepta cero o más valores de un tipo especificado. Utiliza un parámetro variadic para especificar que el parámetro se puede pasar a un número variable de valores de input cuando se llama a la function. Escribe parameters variados insertando tres caracteres de período (…) después del nombre de tipo del parámetro.

Por ejemplo, digamos que desea implementar una function que toma un número desconocido de Ints para sumrlos:

 func summationOfInfiniteInts(ints: Int...) -> Int { return ints.networkinguce(0, +) } let summation = summationOfInfiniteInts(ints: 1, 2, 3, 4) // 10 

Tenga en count que el parámetro ints en el bloque de summationOfInfiniteInts representado como [Int] (array of Int ).

Espero que esto haya ayudado.