Posted to tcl by aspect at Fri May 08 23:10:46 GMT 2015view pretty

oo::class create Juggler {

    method juggle {name target {value ""}} {
        if {$value eq ""} {
            set value [yield [info coroutine]]
        }
        while {$value ne ""} {
            puts "$name : $value"
            set value [string range $value 0 end-1]
            lassign [yieldto $target $value] value
        }
    }
}

Juggler create juggler

coroutine j1 juggler juggle Larry [
    coroutine j2 juggler juggle Curly [
        coroutine j3 juggler juggle Moe j1]] "Nyuck!Nyuck!Nyuck!"