/** * Beispiel aus * * - Algorithmen und Datenstrukturen für Dummies * - von Andreas Gogol-Döring und Thomas Letschert * - Verlag Wiley-VCH; Oktober 2019 * - Kapitel 4, Listen: Immer einer nach dem anderen * * @author A. Gogol-Döring, Th. Letschert */ import Foundation struct AuD_04_05_List_Iterator { enum IntList : Sequence { case Nil indirect case Cons(first: Int, rest: IntList) func makeIterator() -> IntLstIterator { IntLstIterator(lst: self) } } struct IntLstIterator : IteratorProtocol { var lst: IntList init(lst: IntList) { self.lst = lst } mutating func next() -> Int? { switch lst { case .Nil: return nil case .Cons(let first, let rest): lst = rest return first } } } static func run() { let l: IntList = .Cons(first: 1, rest: .Cons(first: 2, rest: .Cons(first: 3, rest: .Cons(first: 4, rest: .Cons(first: 5, rest: .Cons(first: 6, rest: .Cons(first: 7, rest: .Nil))))))) for x in l { print(x) } } }