swift - Custom List data structure implementing SequenceType with using of GeneratorOf struct -
my attempts understand generators , sequences lead me idea of implementing own list data structure , implement protocols use forin loop. code:
class gslist<t> : sequencetype { var next : gslist<t>? var value : t init(_ value: t, next : gslist<t>?) { self.value = value self.next = next } func add(list: gslist<t>) { if (self.next != nil) { self.next?.add(list) } else { self.next = list } } typealias generator = generatorof<gslist<t>> func generate() -> generator { var current: gslist<t>? = self println(current?.value) return generatorof { () -> gslist<t>? in let returnvalue = current current = self.next println(self.value) println(current?.value) return returnvalue } } } var list1 = gslist(1, next: nil) var list2 = gslist(2, next: nil) var list3 = gslist(3, next: nil) var list4 = gslist(4, next: nil) var list5 = gslist(5, next: nil) list1.add(list2) list1.add(list3) list1.add(list4) list1.add(list5) var generator = list1.generate() generator.next() generator.next() generator.next() generator.next() generator.next()
it doesn't have compile time errors problem current
variable not updated next
value in generate()
method:
func generate() -> generator { var current: gslist<t>? = self println(current?.value) return generatorof { () -> gslist<t>? in let returnvalue = current current = self.next println(self.value) println(current?.value) return returnvalue } }
so calling next generator.next()
returns first item.
how can avoid this?
your line
current = self.next
should be
current = current?.next
Comments
Post a Comment