FUNCTION NULL (EX1, %LOCAL% EX2), WHEN ZERO (EX1) EXIT, WHEN FREE (EX1 * EX2, EX2) EXIT, ENDFUN $ FUNCTION ` (EX1), WHEN ATOM (EX1), EX1 EXIT, WHEN APPLY (GET('`, FIRST(EX1)), ARGEX(EX1)) EXIT, EX1, ENDFUN $ PROPERTY `, {, FUNCTION (LEX1, %LOCAL% EX1,EX2,LEX2,LEX3,LEX4), WHEN COLMAT (EX1: ADJOIN ('{, LEX1)), POP (EX1), LEX1: LEX2: LEX3: FALSE, LOOP WHEN ATOM (EX1) EXIT, EX2: REST (POP (EX1)), PUSH (POP (EX2), LEX1), LEX2: ADJOIN (EX2, LEX2), ENDLOOP, LOOP LEX3: ADJOIN (ADJOIN ('[, REVERSE (LEX1)), LEX3), WHEN EMPTY (FIRST (LEX2)) EXIT, LEX4: REVERSE (LEX2), LEX1: LEX2: FALSE, LOOP WHEN ATOM (LEX4) EXIT, EX2: POP (LEX4), PUSH (POP (EX2), LEX1), LEX2: ADJOIN (EX2, LEX2), ENDLOOP, ENDLOOP, LEX3: ADJOIN ('{, REVERSE (LEX3)) EXIT, ADJOIN ('[, MAPFUN ('`, LEX1)), ENDFUN $ PROPERTY `, [, FUNCTION (LEX1), ADJOIN ('{, MAPFUN('`, LEX1)), ENDFUN $ FUNCTION ROW1 (EX1, EX2, % LOCAL % EX3 ), EX3: LIST (), LOOP BLOCK WHEN EX1 EQ EX2, PUSH (1, EX3) EXIT, PUSH (0, EX3), ENDBLOCK, WHEN EX1 EQ 1, ADJOIN ('[, EX3) EXIT, EX1: EX1-1, ENDLOOP, ENDFUN $ FUNCTION IDMAT (EX1, %LOCAL% EX2, EX3), WHEN NOT POSITIVE (EX1), LIST ('IDMAT, EX1) EXIT, EX2: EX1, EX3: FALSE, LOOP WHEN ZERO (EX2) EXIT, PUSH (ROW1 (EX1, EX2), EX3), EX2: EX2 - 1, ENDLOOP, EX3: ADJOIN ('{, EX3), ENDFUN $ RDS() $