28 lines
1.2 KiB
Plaintext
28 lines
1.2 KiB
Plaintext
|
|
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
|