procedure main() wlist := sort(tabwords()) # get sorted list i := 0 while pair := wlist[ i +:= 1 ] do write( left(pair[1], 12), right(pair[2], 3) ) end procedure tabwords() # return table of wchar := &lcase ++ &ucase ++ '\'-' words := table(0) while line := read() do { i := 1 while j := upto(wchar, line, i) do { i := many(wchar, line, j) words[ line[i:j] ] +:= 1 #increment count } } return words end # From The Icon programming Language 1st edn., Ch 5, sec 5.2, p57