Posted to tcl by aspect at Wed Feb 12 05:29:06 GMT 2020view pretty

    set ::result ""                                                                                                                                                          
                                                                                                                                                                             
    proc ok {result} {                                                                                                                                                       
        set ::result $result                                                                                                                                                 
        tailcall return 1                                                                                                                                                    
    }                                                                                                                                                                        
                                                                                                                                                                             
    proc notok {result} {                                                                                                                                                    
        set ::result $result                                                                                                                                                 
        tailcall return 0                                                                                                                                                    
    }                                                                                                                                                                        
                                                                                                                                                                             
    proc res {} {                                                                                                                                                            
        return $::result                                                                                                                                                     
    }                                                                                                                                                                        
                                                                                                                                                                             
    proc q {} {                                                                                                                                                              
        notok "I can't do that Dave"                                                                                                                                         
    }                                                                                                                                                                        
                                                                                                                                                                             
    proc z {} {                                                                                                                                                              
        ok "I like that, please do it again"                                                                                                                                 
    }                                                                                                                                                                        
                                                                                                                                                                             
    proc a {} {                                                                                                                                                              
        if {![q]} {                                                                                                                                                          
            notok [res]                                                                                                                                                      
        }                                                                                                                                                                    
        puts "doing other stuff"                                                                                                                                             
        ok "done"                                                                                                                                                            
    }                                                                                                                                                                        
                                                                                                                                                                             
    if {[a]} {                                                                                                                                                               
        puts "success!  result is [res]"                                                                                                                                     
    } else {                                                                                                                                                                 
        puts "failure!  result is [res]"                                                                                                                                     
    }