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.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow