Posted to tcl by aspect at Thu May 11 10:52:11 GMT 2017view pretty

# nested foreach.                                            
proc foreach* {args} {                                       
    set script [lindex $args end]                            
    set args [lrange $args 0 end-1]                          
    foreach {b a} [lreverse $args] { 
        set script [list foreach $a $b $script]              
    }
    tailcall {*}$script                                      
}                                                            
foreach* {*}{                                                
    compartment {5compt}                                     
    generator {one two three}                                
    switchboard {on two three}                               
} {
    puts [list compartment $compartment generator $generator switchboard $switchboard]
}