Szukaj…


Składnia

  • dla mnie w iter; ...; koniec
  • podczas cond; ...; koniec
  • przerwa
  • kontyntynuj
  • @parallel (op) dla i w iter; ...; koniec
  • @parallel for i in iter; ...; koniec
  • @goto label
  • Etykieta @label

Uwagi

Ilekroć sprawia, że kod jest krótszy i łatwiejszy do odczytania, rozważ użycie funkcji wyższego rzędu, takich jak map lub filter , zamiast pętli.

Fizz Buzz

Typowym przypadkiem użycia pętli for jest iteracja w predefiniowanym zakresie lub kolekcji i wykonanie tego samego zadania dla wszystkich jego elementów. Na przykład tutaj łączymy for pętli z warunkowej if - elseif - else oświadczenia :

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

To klasyczne pytanie do wywiadu Fizz Buzz . (Skrócone) wyjście to:

1
2
Fizz
4
Buzz
Fizz
7
8

Znajdź najmniejszy czynnik pierwszy

W niektórych sytuacjach można chcieć powrócić z funkcji przed zakończeniem całej pętli. Można do tego użyć instrukcji return .

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

Stosowanie:

julia> primefactor(100)
2

julia> primefactor(97)
97

Pętle można również zakończyć wcześniej za pomocą instrukcji break , która kończy tylko otaczającą pętlę zamiast całej funkcji.

Wielowymiarowa iteracja

W Julii pętla for może zawierać przecinek ( , ), aby określić iterację wielu wymiarów. Działa to podobnie do zagnieżdżania pętli w innej, ale może być bardziej kompaktowe. Na przykład poniższa funkcja generuje elementy iloczynu kartezjańskiego dwóch iterałów:

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

Stosowanie:

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)

Jednak indeksowanie tablic dowolnego wymiaru powinno odbywać się za pomocą eachindex , a nie pętli wielowymiarowej (jeśli to możliwe):

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

Pętle redukcyjne i równoległe

Julia udostępnia makra, aby uprościć dystrybucję obliczeń na wielu komputerach lub procesach roboczych. Na przykład poniżej oblicza sumę pewnej liczby kwadratów, być może równolegle.

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

Stosowanie:

julia> sumofsquares(1:10)
385

Aby uzyskać więcej informacji na ten temat, zobacz przykład na @parallel w temacie Parallel @parallel .



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow