수색…


통사론

  • iter에서 i를 위해; ...; 종료
  • 동안 cond; ...; 종료
  • 단절
  • 잇다
  • iter에서 i에 대해 @parallel (op); ...; 종료
  • iter의 i에 대한 @parallel; ...; 종료
  • @goto 라벨
  • @ 라벨 라벨

비고

코드를 더 짧고 읽기 쉽게 만들 때마다 루프 대신 map 또는 filter 와 같은 고차 함수를 사용하는 것이 좋습니다.

피즈 버즈

for 루프의 일반적인 사용 사례는 미리 정의 된 범위 또는 컬렉션을 반복하고 모든 요소에 대해 동일한 작업을 수행하는 것입니다. 예를 들어 여기서는 for 루프를 조건부 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

이것은 고전적인 Fizz Buzz 인터뷰 질문입니다. (잘린) 출력은 다음과 같습니다.

1
2
Fizz
4
Buzz
Fizz
7
8

가장 작은 소수 요소 찾기

일부 상황에서는 전체 루프를 완료하기 전에 함수에서 리턴하려고 할 수 있습니다. return 문을 사용할 수 있습니다.

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

용법:

julia> primefactor(100)
2

julia> primefactor(97)
97

루프는 break 문을 사용하여 조기에 종료 할 수도 있습니다. break 문은 전체 함수 대신 내부 루프를 종료합니다.

다차원 반복

Julia에서 for 루프는 여러 차원에서 반복을 지정하기 위해 쉼표 ( , )를 포함 할 수 있습니다. 이는 다른 루프 내에서 루프를 중첩하는 것과 유사하게 작동하지만보다 소형화 될 수 있습니다. 예를 들어, 아래의 함수는 두개의 반복문을 가진 데카르트 곱 의 원소를 생성합니다 :

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

용법:

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 하여 수행해야합니다.

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

축소 및 병렬 루프

Julia는 매크로를 제공하여 여러 컴퓨터 또는 작업자에게 계산을 분산시키는 작업을 단순화합니다. 예를 들어, 다음은 가능하면 병렬로 몇 개의 정사각형 수의 합계를 계산합니다.

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

용법:

julia> sumofsquares(1:10)
385

이 항목에 대한 자세한 내용은 Parallel Processesing 항목의 @parallel 있는 예제 를 참조하십시오.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow