• DoctypeDeclaration{http://etl.sf.net/etl/doctype/0.2.1}:
    • systemId: "calculator-lambda-0_2_1.g.etl"
  • VarStatement{http://etl.sf.net/samples/calculator/vars}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
        • text: /// The special marker value used to stop computation in sum function
    • type: let
    • name:
      • Name{http://etl.sf.net/samples/calculator/vars}:
        • literal: STOP
    • value:
      • Lambda{http://etl.sf.net/samples/calculator/lambda}:
        • parameters:
          • Parameter{http://etl.sf.net/samples/calculator/lambda}:
            • name:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: x
        • value:
          • Name{http://etl.sf.net/samples/calculator/vars}:
            • literal: x
  • VarStatement{http://etl.sf.net/samples/calculator/vars}:
    • documentation:
      • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
        • text: /// Sum arguments up to stop marker like {@code sum(0,1,2,3,STOP)}
      • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
        • text: ///
      • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
        • text: /// @return the function that accumulates results.
    • type: let
    • name:
      • Name{http://etl.sf.net/samples/calculator/vars}:
        • literal: sum
    • value:
      • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
        • statements:
          • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
            • VarStatement{http://etl.sf.net/samples/calculator/vars}:
              • type: var
              • name:
                • Name{http://etl.sf.net/samples/calculator/vars}:
                  • literal: sum
              • value:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 0
            • LetRec{http://etl.sf.net/samples/calculator/vars}:
              • definitions:
                • LetRecPart{http://etl.sf.net/samples/calculator/vars}:
                  • name:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: acc
                  • value:
                    • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                      • parameters:
                        • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                          • name:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: x
                      • value:
                        • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                          • condition:
                            • Equal{http://etl.sf.net/samples/calculator/logic}:
                              • first:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: x
                              • second:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: STOP
                          • thenPart:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: sum
                          • elsePart:
                            • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                              • statements:
                                • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                  • value:
                                    • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                      • first:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: sum
                                      • second:
                                        • Plus{http://etl.sf.net/samples/calculator/arith}:
                                          • first:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: sum
                                          • second:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: x
                                • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                  • value:
                                    • Name{http://etl.sf.net/samples/calculator/vars}:
                                      • literal: acc
    • VarStatement{http://etl.sf.net/samples/calculator/vars}:
      • documentation:
        • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
          • text: /// Greatest common divisor
        • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
          • text: ///
        • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
          • text: /// @param a the positive integer value
        • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
          • text: /// @param b the positive integer value
        • DocumentationLine{http://etl.sf.net/samples/calculator/meta}:
          • text: /// @return the greatest common divisor
      • type: let
      • name:
        • Name{http://etl.sf.net/samples/calculator/vars}:
          • literal: gcd
      • value:
        • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
          • statements:
            • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
              • parameters:
                • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                  • type: var
                  • name:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • quoted: q'a'
                • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                  • type: var
                  • name:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: b
            • ExpressionStatement{http://etl.sf.net/samples/calculator}:
              • value:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: assertInt
                  • arguments:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: a
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: b
            • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
              • condition:
                • ConditionalAnd{http://etl.sf.net/samples/calculator/logic}:
                  • first:
                    • MoreThen{http://etl.sf.net/samples/calculator/logic}:
                      • first:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: a
                      • second:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 0
                  • second:
                    • MoreThen{http://etl.sf.net/samples/calculator/logic}:
                      • first:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: b
                      • second:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 0
            • ExpressionStatement{http://etl.sf.net/samples/calculator}:
              • value:
                • IfExpression{http://etl.sf.net/samples/calculator/logic}:
                  • condition:
                    • LessThen{http://etl.sf.net/samples/calculator/logic}:
                      • first:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: a
                      • second:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: b
                  • thenPart:
                    • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                      • statements:
                        • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                          • type: let
                          • name:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: t
                          • value:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: a
                        • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                          • value:
                            • Assignment{http://etl.sf.net/samples/calculator/vars}:
                              • first:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: a
                              • second:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • quoted: Q'b'
                        • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                          • value:
                            • Assignment{http://etl.sf.net/samples/calculator/vars}:
                              • first:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: b
                              • second:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: t
            • WhileStatement{http://etl.sf.net/samples/calculator/logic}:
              • condition:
                • NotEqual{http://etl.sf.net/samples/calculator/logic}:
                  • first:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: b
                  • second:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 0
              • body:
                • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                  • statements:
                    • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                      • type: let
                      • name:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: r
                      • value:
                        • Remainder{http://etl.sf.net/samples/calculator/arith}:
                          • first:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: a
                          • second:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: b
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Assignment{http://etl.sf.net/samples/calculator/vars}:
                          • first:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: a
                          • second:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: b
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Assignment{http://etl.sf.net/samples/calculator/vars}:
                          • first:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: b
                          • second:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: r
            • ExpressionStatement{http://etl.sf.net/samples/calculator}:
              • value:
                • Name{http://etl.sf.net/samples/calculator/vars}:
                  • literal: a
    • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
      • condition:
        • Apply{http://etl.sf.net/samples/calculator/lambda}:
          • arguments:
            • NumberLiteral{http://etl.sf.net/samples/calculator}:
              • value: 11
          • function:
            • Name{http://etl.sf.net/samples/calculator/vars}:
              • literal: !*=
          • arguments:
            • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
              • statements:
                • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
                  • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                    • value:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 12
      • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
        • condition:
          • Apply{http://etl.sf.net/samples/calculator/lambda}:
            • arguments:
              • Identity{http://etl.sf.net/samples/calculator}:
                • value:
                  • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                    • value:
                      • NumberLiteral{http://etl.sf.net/samples/calculator}:
                        • value: 12
            • function:
              • Name{http://etl.sf.net/samples/calculator/vars}:
                • literal: =*=
            • arguments:
              • Identity{http://etl.sf.net/samples/calculator}:
                • value:
                  • Apply{http://etl.sf.net/samples/calculator/lambda}:
                    • function:
                      • Name{http://etl.sf.net/samples/calculator/vars}:
                        • literal: &
                    • arguments:
                      • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                        • value:
                          • NumberLiteral{http://etl.sf.net/samples/calculator}:
                            • value: 12
      • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
        • condition:
          • Equal{http://etl.sf.net/samples/calculator/logic}:
            • first:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 12
            • second:
              • Dereference{http://etl.sf.net/samples/calculator/lambda}:
                • value:
                  • Identity{http://etl.sf.net/samples/calculator}:
                    • value:
                      • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                        • value:
                          • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                            • value:
                              • Apply{http://etl.sf.net/samples/calculator/lambda}:
                                • function:
                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                    • literal: &
                                • arguments:
                                  • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                                    • value:
                                      • Apply{http://etl.sf.net/samples/calculator/lambda}:
                                        • function:
                                          • Apply{http://etl.sf.net/samples/calculator/lambda}:
                                            • function:
                                              • Name{http://etl.sf.net/samples/calculator/vars}:
                                                • literal: max
                                            • arguments:
                                              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                • value: 10
                                        • arguments:
                                          • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                            • value: 12
      • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
        • condition:
          • Equal{http://etl.sf.net/samples/calculator/logic}:
            • first:
              • NumberLiteral{http://etl.sf.net/samples/calculator}:
                • value: 12
            • second:
              • Dereference{http://etl.sf.net/samples/calculator/lambda}:
                • value:
                  • Identity{http://etl.sf.net/samples/calculator}:
                    • value:
                      • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                        • value:
                          • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                            • value:
                              • Apply{http://etl.sf.net/samples/calculator/lambda}:
                                • function:
                                  • Name{http://etl.sf.net/samples/calculator/vars}:
                                    • quoted: q'&'
                                • arguments:
                                  • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                                    • statements:
                                      • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
                                        • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                          • value:
                                            • Plus{http://etl.sf.net/samples/calculator/arith}:
                                              • first:
                                                • Plus{http://etl.sf.net/samples/calculator/arith}:
                                                  • first:
                                                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                      • value: 1
                                                  • second:
                                                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                      • value: 10
                                              • second:
                                                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                                  • value: 1
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: abs
                  • arguments:
                    • Minus{http://etl.sf.net/samples/calculator/arith}:
                      • first:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 1
                      • second:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 13
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: sum
                  • arguments:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 0
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 1
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 2
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 3
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 3
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 2
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 1
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 0
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: STOP
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • Divide{http://etl.sf.net/samples/calculator/arith}:
                  • first:
                    • Apply{http://etl.sf.net/samples/calculator/lambda}:
                      • function:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: factorial
                      • arguments:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 4
                  • second:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 2
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • arguments:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 420
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: gcd
                  • arguments:
                    • Plus{http://etl.sf.net/samples/calculator/arith}:
                      • first:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 140
                      • second:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 4
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                  • statements:
                    • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                      • type: var
                      • name:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: s
                      • value:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 0
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Apply{http://etl.sf.net/samples/calculator/lambda}:
                          • function:
                            • Apply{http://etl.sf.net/samples/calculator/lambda}:
                              • arguments:
                                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                  • value: 0
                              • function:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: upto
                              • arguments:
                                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                  • value: 4
                          • arguments:
                            • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                              • statements:
                                • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
                                  • parameters:
                                    • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                                      • name:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: i
                                • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                  • value:
                                    • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                      • first:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: s
                                      • second:
                                        • Plus{http://etl.sf.net/samples/calculator/arith}:
                                          • first:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: s
                                          • second:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: i
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Multiply{http://etl.sf.net/samples/calculator/arith}:
                          • first:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: s
                          • second:
                            • NumberLiteral{http://etl.sf.net/samples/calculator}:
                              • value: 2
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                  • statements:
                    • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                      • type: var
                      • name:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: s
                      • value:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 0
                    • VarStatement{http://etl.sf.net/samples/calculator/vars}:
                      • type: var
                      • name:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: n
                      • value:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 0
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Apply{http://etl.sf.net/samples/calculator/lambda}:
                          • function:
                            • Apply{http://etl.sf.net/samples/calculator/lambda}:
                              • function:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: for
                              • arguments:
                                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                  • value: 14
                                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                  • value: 9.9
                                • UnaryMinus{http://etl.sf.net/samples/calculator/arith}:
                                  • value:
                                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                      • value: 0.25
                          • arguments:
                            • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                              • statements:
                                • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
                                  • parameters:
                                    • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                                      • name:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: i
                                • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                  • value:
                                    • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                      • first:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: s
                                      • second:
                                        • Plus{http://etl.sf.net/samples/calculator/arith}:
                                          • first:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: s
                                          • second:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: i
                                • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                                  • value:
                                    • Assignment{http://etl.sf.net/samples/calculator/vars}:
                                      • first:
                                        • Name{http://etl.sf.net/samples/calculator/vars}:
                                          • literal: n
                                      • second:
                                        • Plus{http://etl.sf.net/samples/calculator/arith}:
                                          • first:
                                            • Name{http://etl.sf.net/samples/calculator/vars}:
                                              • literal: n
                                          • second:
                                            • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                              • value: 1
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Divide{http://etl.sf.net/samples/calculator/arith}:
                          • first:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: s
                          • second:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: n
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 1
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: sign
                  • arguments:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 12
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • UnaryMinus{http://etl.sf.net/samples/calculator/arith}:
                  • value:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 1
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: sign
                  • arguments:
                    • UnaryMinus{http://etl.sf.net/samples/calculator/arith}:
                      • value:
                        • Name{http://etl.sf.net/samples/calculator/vars}:
                          • literal: MIN_NUMBER
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Equal{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 0
              • second:
                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                  • function:
                    • Name{http://etl.sf.net/samples/calculator/vars}:
                      • literal: sign
                  • arguments:
                    • Minus{http://etl.sf.net/samples/calculator/arith}:
                      • first:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 12
                      • second:
                        • NumberLiteral{http://etl.sf.net/samples/calculator}:
                          • value: 12
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • Matches{http://etl.sf.net/samples/calculator/logic}:
              • first:
                • NumberLiteral{http://etl.sf.net/samples/calculator}:
                  • value: 12
              • second:
                • LambdaSequence{http://etl.sf.net/samples/calculator/lambda}:
                  • statements:
                    • BlockParameters{http://etl.sf.net/samples/calculator/lambda}:
                      • parameters:
                        • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                          • name:
                            • Name{http://etl.sf.net/samples/calculator/vars}:
                              • literal: n
                    • ExpressionStatement{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Equal{http://etl.sf.net/samples/calculator/logic}:
                          • first:
                            • Apply{http://etl.sf.net/samples/calculator/lambda}:
                              • function:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: sign
                              • arguments:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: n
                          • second:
                            • NumberLiteral{http://etl.sf.net/samples/calculator}:
                              • value: 1
        • AssertStatement{http://etl.sf.net/samples/calculator/logic}:
          • condition:
            • LogicalNot{http://etl.sf.net/samples/calculator/logic}:
              • value:
                • Matches{http://etl.sf.net/samples/calculator/logic}:
                  • first:
                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                      • value: 12
                  • second:
                    • Identity{http://etl.sf.net/samples/calculator}:
                      • value:
                        • Lambda{http://etl.sf.net/samples/calculator/lambda}:
                          • parameters:
                            • Parameter{http://etl.sf.net/samples/calculator/lambda}:
                              • name:
                                • Name{http://etl.sf.net/samples/calculator/vars}:
                                  • literal: n
                          • value:
                            • Equal{http://etl.sf.net/samples/calculator/logic}:
                              • first:
                                • Apply{http://etl.sf.net/samples/calculator/lambda}:
                                  • function:
                                    • Name{http://etl.sf.net/samples/calculator/vars}:
                                      • literal: sign
                                  • arguments:
                                    • Name{http://etl.sf.net/samples/calculator/vars}:
                                      • literal: n
                              • second:
                                • UnaryMinus{http://etl.sf.net/samples/calculator/arith}:
                                  • value:
                                    • NumberLiteral{http://etl.sf.net/samples/calculator}:
                                      • value: 1
             1: doctype "calculator-lambda-0_2_1.g.etl";
             2: 
             3: /// The special marker value used to stop computation in sum function
             4: let STOP = \x => x;
             5: /// Sum arguments up to stop marker like {@code sum(0,1,2,3,STOP)}
             6: ///
             7: /// @return the function that accumulates results.
             8: let sum = {?;
             9:     var sum = 0;
            10:     to acc(x) => if( x == STOP) sum else {sum = sum + x; acc;};
            11: };
            12: /// Greatest common divisor
            13: ///
            14: /// @param a the positive integer value
            15: /// @param b the positive integer value
            16: /// @return the greatest common divisor
            17: let gcd = {? var q'a', var b;
            18:     assertInt(a,b);
            19:     assert a > 0 && b > 0;
            20:     if(a < b) {
            21:         let t = a;
            22:         a = Q'b';
            23:         b = t;
            24:     };
            25:     while(b != 0) {
            26:         let r = a % b;
            27:         a = b;
            28:         b = r;
            29:     };
            30:     a;
            31: };
            32: 
            33: 
            34: assert 11 !*= {?; 12;};
            35: assert (\> 12) =*= (& 12);
            36: assert 12 == * (\()=> \> & max(10)(12));
            37: assert 12 == * (\()=> \> #q'&' {?;1+10+1;});
            38: assert 12 == #abs 1-13;
            39: assert 12 == sum(0,1,2,3,3,2,1,0,STOP);
            40: assert 12 == factorial(4) / 2;
            41: assert 12 == 420 #gcd 140 + 4;
            42: assert 12 == {
            43:     var s = 0;
            44:     0 #upto 4 {?i;
            45:         s = s + i;
            46:     };
            47:     s * 2;
            48: }; 
            49: assert 12 == {
            50:     var s = 0;
            51:     var n = 0;
            52:     for(14, 9.9, -0.25) {?i;
            53:         s = s + i;
            54:         n = n + 1;
            55:     };
            56:     s / n;
            57: };
            58: assert  1 == #sign 12;
            59: assert -1 == #sign -MIN_NUMBER;
            60: assert  0 == sign(12-12);
            61: assert   12 ==~ {?n; sign(n) == 1;};
            62: assert ! 12 ==~ (\n => sign(n) == -1);