Julia Language
para bucles
Buscar..
Sintaxis
- para i en iter ...; fin
- mientras cond ...; fin
- descanso
- continuar
- @parallel (op) para i en iter; ...; fin
- @parallel para i en iter; ...; fin
- etiqueta @goto
- etiqueta @label
Observaciones
Cuando haga que el código sea más corto y fácil de leer, considere usar funciones de orden superior, como map
o filter
, en lugar de bucles.
Fizz Buzz
Un caso de uso común para un bucle for
es iterar sobre un rango o colección predefinidos, y hacer la misma tarea para todos sus elementos. Por ejemplo, aquí combinamos un bucle for
con una sentencia condicional if
- elseif
- else
:
for i in 1:100
if i % 15 == 0
println("FizzBuzz")
elseif i % 3 == 0
println("Fizz")
elseif i % 5 == 0
println("Buzz")
else
println(i)
end
end
Esta es la clásica entrevista de Fizz Buzz . La salida (truncada) es:
1
2
Fizz
4
Buzz
Fizz
7
8
Encuentra el factor primo más pequeño
En algunas situaciones, es posible que desee regresar de una función antes de terminar un ciclo completo. La declaración de return
se puede utilizar para esto.
function primefactor(n)
for i in 2:n
if n % i == 0
return i
end
end
@assert false # unreachable
end
Uso:
julia> primefactor(100)
2
julia> primefactor(97)
97
Los bucles también pueden terminarse antes con la instrucción de break
, que termina solo el bucle envolvente en lugar de toda la función.
Iteración multidimensional
En Julia, un bucle for puede contener una coma ( ,
) para especificar la iteración sobre múltiples dimensiones. Esto actúa de manera similar a anidar un bucle dentro de otro, pero puede ser más compacto. Por ejemplo, la siguiente función genera elementos del producto cartesiano de dos iterables:
function cartesian(xs, ys)
for x in xs, y in ys
produce(x, y)
end
end
Uso:
julia> collect(@task cartesian(1:2, 1:4))
8-element Array{Tuple{Int64,Int64},1}:
(1,1)
(1,2)
(1,3)
(1,4)
(2,1)
(2,2)
(2,3)
(2,4)
Sin embargo, la indexación sobre matrices de cualquier dimensión se debe hacer con cada eachindex
, no con un bucle multidimensional (si es posible):
s = zero(eltype(A))
for ind in eachindex(A)
s += A[ind]
end
Reducción y bucles paralelos.
Julia proporciona macros para simplificar la distribución de computación en múltiples máquinas o trabajadores. Por ejemplo, lo siguiente calcula la suma de algún número de cuadrados, posiblemente en paralelo.
function sumofsquares(A)
@parallel (+) for i in A
i ^ 2
end
end
Uso:
julia> sumofsquares(1:10)
385
Para obtener más información sobre este tema, consulte el ejemplo en @parallel
dentro del tema @parallel
paralelo.