Julia Language
for 루프
수색…
통사론
- 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
있는 예제 를 참조하십시오.