
parameter (pair (lambda int int) (list int));
return (list int);
storage unit;
code { DIP{NIL int};
       CAR;
       DUP;
       DIP{CAR; PAIR};          # Unpack data and setup accumulator
       CDR;
       LAMBDA (pair int (pair (lambda int int) (list int)))
              (pair (lambda int int) (list int))
              # Apply the lambda and add the new element to the list
              { DUP; CDAR;
                DIP{ DUP; DIP{CDAR}; DUP;
                     CAR; DIP{CDDR; SWAP}; EXEC; CONS};
                PAIR};
       REDUCE; CDR; DIP{NIL int}; # First reduce
       LAMBDA (pair int (list int))
              (list int)
              {DUP; CAR; DIP{CDR}; CONS};
       REDUCE;                  # Correct list order
       UNIT; SWAP; PAIR}        # Calling convention
