: vector ( ...n"- ) here [ &, times ] dip : .data ` swap ` + ` @ ` do ` ; ; : .I dup @ ^buffer'add ; : .V dup 1 + @ ^buffer'add ; : .X dup 2 + @ ^buffer'add ; [ .I .X drop ] [ .V .I .I .I drop ] [ .V .I .I drop ] [ .V .I drop ] [ .V drop ] [ .I .V drop ] [ .I .I .I drop ] [ .I .I drop ] [ .I drop ] &drop 10 vector .digit : record ( an- ) 10 /mod dup [ [ over 2 + ] dip record ] &drop if .digit ; : toRoman ( n-a ) here ^buffer'set dup 1 3999 within 0 = [ "EX LIMITO!\n" ] [ "IVXLCDM" swap record here ] if ;