publicinterface Iterable<out T>{/**
* Returns an iterator over the elements of this object.
*/publicoperatorfuniterator(): Iterator<T>}
Iterator
next()
hasNext()
publicinterface Iterator<out T>{/**
* Returns the next element in the iteration.
*/publicoperatorfunnext(): T
/**
* Returns `true` if the iteration has more elements.
*/publicoperatorfunhasNext(): Boolean
}
/**
* Given an [iterator] function constructs an [Iterable] instance that returns values through the [Iterator]
* provided by that function.
*/@kotlin.internal.InlineOnly
publicinlinefun<T>Iterable(crossinline iterator:()-> Iterator<T>): Iterable<T>=object: Iterable<T>{overridefuniterator(): Iterator<T>=iterator()}
funmain(args: Array<String>){var x =5while(x >0){println(x) x--}do{println(x) x--}while(x >0)// for (arg in args){// println(arg)// }//// for((index, value) in args.withIndex()){// println("$index -> $value")// }//// for(indexedValue in args.withIndex()){// println("${indexedValue.index} -> ${indexedValue.value}")// }//// val list = MyIntList()// list.add(1)// list.add(2)// list.add(3)//// for(i in list){// println(i)// }}classMyIterator(val iterator: Iterator<Int>){operatorfunnext(): Int{return iterator.next()}operatorfunhasNext(): Boolean{return iterator.hasNext()}}class MyIntList{privateval list = ArrayList<Int>()funadd(int : Int){ list.add(int)}funremove(int: Int){ list.remove(int)}operatorfuniterator(): MyIterator{returnMyIterator(list.iterator())}}