! some stack cleanup (but all untested) : (n>z) ( n -- z ) [ 10 ] dip -10 * 0 1 4array ; : prod ( z n -- z' ) (n>z) swap comp ; : pidigit-array ( n -- array ) [ unit 1 ] dip [ pi-stream ] { } make ; : lifts ( k -- z ) dup 2 * 1+ ! k 2k+1 [ 2 * 0 ] keep ! k 4k+2 0 2k+1 4array ; ! for other words, try to split to smaller words, keep constants seperated from the word's functionality, and don't put two implementations in one word. split it and use its name. ! also try to use the cleave and spread combinators. for example: z1 first4 { [ :> q ] [ :> r ] [ :> s ] [ :> T ] } spread although the let solution is good also. note: all of the above code is untested