struct VanEckSequence: Sequence, IteratorProtocol { private var index = 0 private var lastTerm = 0 private var lastPos = Dictionary() mutating func next() -> Int? { let result = lastTerm var nextTerm = 0 if let v = lastPos[lastTerm] { nextTerm = index - v } lastPos[lastTerm] = index lastTerm = nextTerm index += 1 return result } } let seq = VanEckSequence().prefix(1000) print("First 10 terms of the Van Eck sequence:") for n in seq.prefix(10) { print(n, terminator: " ") } print("\nTerms 991 to 1000 of the Van Eck sequence:") for n in seq.dropFirst(990) { print(n, terminator: " ") } print()