lazy property를 사용해본 경험이 있다. 해당 아이디어는 함수형 프로그래밍 언어에서 주로 사용한다. 이번에는 지연 계산법이 무엇인지, 그리고 Lazy와 unfold sequence에 대해 알아본다.
let array1 = Array(0..<10000)
let array2 = array1.lazy.map { $0 + 1 }
print("\(array2[0])", "\(array2[4])")
.lazy
로 접근해야 함Swift-Evolution 0094
어떤 가변 상태에 따라 Closure를 반복적으로 적용해서 element들이 만들어지는 sequence
각 element는 lazy하게 계산되며 무한의 길이를 가질 수 있음
사용방법
무한 Sequence
let seq = sequence(first: 0.1, next: { $0 * 2 }).dropFirst(5).prefix(10)
for x in seq {
NSLog("\(x))
}
dropFirst(n)
는 앞의 n개를 버리는 함수피보나치 수열
func next(pair: inout (Int, Int)) -> Int {
pair = (pair.1, pair.0 + pair.1
return pair.1)
}
var seq = sequence(state: (0, 1), next: next).prefix(20)
for x in seq {
print("\(x)")
}
inout
을 사용하여 pair안의 값을 계속해서 바꿈