This form of TRANSFORM must be terminated by the END keyword. The resulttype must be specified, and the function itself takes parameters in the parameterlist. These parameters are typically RECORD structures, but may be any type of parameter depending upon the type of TRANSFORM function the using function expects to call. The exact form a TRANSFORM function must take is always directly associated with the operation that uses it.
Example:
Ages := RECORD AgedRecs.id; AgedRecs.id1; AgedRecs.id2; END; SequencedAges := RECORD Ages; INTEGER4 Sequence := 0; END; SequencedAges AddSequence(AgedRecs L, INTEGER C) := TRANSFORM, SKIP(C % 2 = 0) //skip even recs INTEGER1 rangex(UNSIGNED4 divisor) := (l.id DIV divisor) % 100; SELF.id1 := rangex(10000); SELF.id2 := rangex(100); SELF.Sequence := C; SELF := L; END; SequencedAgedRecs := PROJECT(AgedRecs, AddSequence(LEFT,COUNTER)); //Example of defining a TRANSFORM function in terms of another namesIdRecord assignId(namesRecord l, UNSIGNED value) := TRANSFORM SELF.id := value; SELF := l; END; assignId1(namesRecord l) := assignId(l, 1); //creates an assignId1 TRANSFORM that uses assignId assignId2(namesRecord l) := assignId(l, 2); //creates an assignId2 TRANSFORM that uses assignId