parameter (list int); return (list int); storage unit; code { CAR; # Access list # Insert procedure LAMBDA (pair int (list int)) (list int) { DUP; CDR; DIP{CAR}; # Unpack accumulator and existing list DIIP{NIL int}; PUSH bool True; # Setup loop LOOP { IF_CONS { SWAP; DIP{DUP; DIIP{DUP}; DIP{CMPLT}; SWAP}; # Duplicate numbers SWAP; # If less than IF { DIP{SWAP; DIP{CONS}}; PUSH bool True} # Otherwise { SWAP; CONS; PUSH bool False}} # Ending case { NIL int; PUSH bool False}}; SWAP; CONS; SWAP; # Finish lists LAMBDA (pair int (list int)) (list int) {DUP; CAR; DIP{CDR}; CONS}; REDUCE}; NIL int; SWAP; DIP{SWAP}; # Accumulator for reverse onto REDUCE; # Execute reverse onto UNIT; SWAP; PAIR} # Calling convention