1.2.38. test/regress/rt-1.01.38

Start felix section to test/regress/rt-1.01.38-0.flx[1 /1 ]
     1: #line 1454 "./lpsrc/flx_regress.pak"
     2: //Check generators
     3: #import <flx.flxh>
     4: 
     5: union tree = TEmpty | Leaf of int | Node of tree * tree;
     6: 
     7: var example =
     8:   Node
     9:   (
    10:     Node
    11:     (
    12:       Leaf 1,
    13:       Node
    14:       (
    15:         Leaf 2,
    16:         Leaf 3
    17:       )
    18:     )
    19:     ,
    20:     Node
    21:     (
    22:       Leaf 4,
    23:       Leaf 5
    24:     )
    25:   )
    26: ;
    27: 
    28: fun sum: tree->int =
    29:   | Leaf ?x => x
    30:   | Node (?l,?r) => sum l + sum r
    31:   | TEmpty => 0
    32: ;
    33: 
    34: print$ sum example; endl;
    35: 
    36: fun accumulate(it: 1-> int):int=
    37: {
    38:   var x = 0;
    39:   var v = it();
    40:   whilst v != -1 do
    41:     x += v;
    42:     v = it();
    43:   done;
    44:   return x;
    45: }
    46: 
    47: gen visitor(x:tree) () : int =
    48: {
    49:   var con =
    50:     match x with
    51:     | Leaf ?a => { print "visiting leaf "; print a; endl; yield a; return -1; }
    52:     | Node (?a,?b) =>
    53:       {
    54:         print "visiting node: left\n";
    55:         var it = visitor(a);
    56:         var v = it();
    57:         whilst v != -1 do
    58:           yield v;
    59:           v = it();
    60:         done;
    61:         print "visiting node: right\n";
    62:         it = visitor(b);
    63:         v = it();
    64:         whilst v != -1 do
    65:           yield v;
    66:           v = it();
    67:         done;
    68:         return -1;
    69:       }
    70:     | TEmpty => { return -1; }
    71:     endmatch
    72:   ;
    73:   var r = con();
    74:   whilst r != -1 do
    75:     yield r;
    76:     r = con();
    77:   done;
    78:   return -1;
    79: }
    80: 
    81: var it = visitor(example);
    82: var res = accumulate(it);
    83: print$ res; endl;
End felix section to test/regress/rt-1.01.38-0.flx[1]
Start data section to test/regress/rt-1.01.38-0.expect[1 /1 ]
     1: 15
     2: visiting node: left
     3: visiting node: left
     4: visiting leaf 1
     5: visiting node: right
     6: visiting node: left
     7: visiting leaf 2
     8: visiting node: right
     9: visiting leaf 3
    10: visiting node: right
    11: visiting node: left
    12: visiting leaf 4
    13: visiting node: right
    14: visiting leaf 5
    15: 15
End data section to test/regress/rt-1.01.38-0.expect[1]