[NAME]
ALL.dao.routine.anonymous

[TITLE]
Anonymous Routine

[DESCRIPTION]


 0.1  Routine As First Class Object 

Dao also support first class functions / routines. They can be created in the following
way:
     
   1  foo = routine( x, y : TYPE, z = DEFAULT )
   2  {
   3     codes;
   4  }
     
The definition of such functions is identical to the normal function definition, except 
the following differences:
  1. there is no need for a function name, but the created function must be assigned to a
     variable;
  2. the default value expressions for parameters do not necessary to be constant
     expressions, they are evaluated at running time when the function is created;
  3. the function body may contain variables defined in the "upper" function that creates
     it; depending on the type of the "upper" variable, its copy (for simple types) or
     reference will be used by the created function.


Here is an example,
     
   1  a = "ABC";
   2  
   3  rout = routine( x, y : string, z = a+a ){
   4      a += "_abc";
   5      io.writeln( "lambda ", a )
   6      io.writeln( "lambda ", y )
   7      io.writeln( "lambda ", z )
   8  }
   9  
  10  rout( 1, "XXX" );