generalized stack operators
stevan apter — 2000-06-27 11:30:54
in conk, i've defined
dup == 1 ndup;
pop == 1 npop;
dip == 1 ndip;
ary == 1 nary;
app == 1 napp;
choice == 2 nchoice;
swap == 1 2 nmswap;
where the parameterized versions are primitive:
ndip [P] N -> R
R is P applied to Nth item down.
nary [P] N -> R
executes P, but no matter how many parameters this consumes, N are removed from the stack.
napp .. XN [P] N -> R1 ..
executes P N times, with .. XN on top of the stack. Returns N values R1 .. .
npop N -> R
removes N items from the top of the stack.
ndup X N -> R
makes N copies of the top of the stack.
nmrot N M -> R
M-rotate the top N items of the stack.
nmswap N M -> R
swap N-th and M-th items down on the stack.
nlist N -> X
X is a list of the top N items.
nchoice I .. XN N -> Xi
Xi is the I-th item of the top N items on the stack.
particularly in the case of ary and app, this seemed more economical than having primitives
app1, app2, app3, nullary, binary, ternary, etc.
partly, it was a matter of trying to confine this family of operations to a small set.
any ideas on the best way to proceed here?