Zoeken…


Syntaxis

  • want ik in iter; ...; einde
  • terwijl cond; ...; einde
  • breken
  • doorgaan met
  • @parallel (op) voor i in iter; ...; einde
  • @parallel voor i in iter; ...; einde
  • @goto label
  • @label label

Opmerkingen

Wanneer het code korter en gemakkelijker te lezen maakt, overweeg dan om functies van een hogere orde te gebruiken, zoals map of filter , in plaats van lussen.

Fizz Buzz

Een veelvoorkomend geval voor een for lus is itereren over een vooraf gedefinieerd bereik of verzameling en dezelfde taak uitvoeren voor alle elementen. Hier combineren we bijvoorbeeld een for lus met een voorwaardelijke if - elseif - else instructie :

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

Dit is de klassieke Fizz Buzz- interviewvraag. De (ingekorte) uitvoer is:

1
2
Fizz
4
Buzz
Fizz
7
8

Vind de kleinste priemfactor

In sommige situaties wilt u misschien terugkeren uit een functie voordat u een hele lus voltooit. De return statement kan gebruikt voor zijn.

function primefactor(n)
    for i in 2:n
        if n % i == 0
            return i
        end
    end
    @assert false  # unreachable
end

Gebruik:

julia> primefactor(100)
2

julia> primefactor(97)
97

Lussen kunnen ook vroegtijdig worden beëindigd met de instructie break , waarmee alleen de insluitende lus wordt beëindigd in plaats van de hele functie.

Multidimensionale iteratie

In Julia kan een for-lus een komma ( , ) bevatten om iteratie over meerdere dimensies te specificeren. Dit werkt op dezelfde manier als een lus in een andere lus, maar kan compacter zijn. De onderstaande functie genereert bijvoorbeeld elementen van het Cartesiaanse product met twee iterables:

function cartesian(xs, ys)
    for x in xs, y in ys
        produce(x, y)
    end
end

Gebruik:

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)

eachindex over arrays van elke dimensie moet echter worden gedaan met elke eachindex , niet met een multidimensionale lus (indien mogelijk):

s = zero(eltype(A))
for ind in eachindex(A)
    s += A[ind]
end

Reductie en parallelle lussen

Julia biedt macro's om de distributie van berekeningen over meerdere machines of werknemers te vereenvoudigen. Het volgende berekent bijvoorbeeld de som van een aantal vierkanten, mogelijk parallel.

function sumofsquares(A)
    @parallel (+) for i in A
        i ^ 2
    end
end

Gebruik:

julia> sumofsquares(1:10)
385

Zie het voorbeeld op @parallel in het onderwerp Parallel Processinging voor meer informatie over dit onderwerp .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow