2018-02-02 20:00:33 +04:00
|
|
|
|
|
|
|
parameter (pair (lambda int int) (list int));
|
2018-04-05 19:17:27 +04:00
|
|
|
storage (list int);
|
2018-02-02 20:00:33 +04:00
|
|
|
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
|
2018-04-05 19:17:27 +04:00
|
|
|
NIL operation; PAIR} # Calling convention
|