variable buf variable coins create vals 25 cells allot create numname 2 cells allot ( -- a1 ... an n) : coinset 1 2 5 10 20 50 100 200 8 ; ( -- ) : init coinset dup coins ! vals swap 0 u+do dup i cells + rot swap ! loop drop ; ( n1 n2 -- ) : setname numname ! numname 1 cells + ! ; ( n1 n2 -- n ) : calc { pos rest } pos rest setname numname 2 cells find-name dup 0<> if name>int execute else drop rest 0= if 1 else 0 coins @ pos u+do rest vals i cells + @ 2dup >= if - i swap recurse + else 2drop endif loop endif pos rest setname dup buf ! :noname buf @ postpone literal postpone ; numname 2 cells nextname alias endif ; ( n -- n ) : poss init 0 swap calc ;