4.3BSD/usr/contrib/icon/book/f/tabwords3.icn

procedure main()
   a := sort(wordlengths())		# get sorted list
   i := 0
   while pair := a[i +:= 1] do
      write(left(pair[1] || ":",4),right(pair[2],6))
end

procedure wordlengths()
   wchar := &lcase ++ &ucase ++ '\'-'
   lengths := table(0)
   while line := read() do {
      i := 1
      while j := upto(wchar,line,i) do {
         i := many(wchar,line,j)
         lengths[*line[i:j]] +:= 1	# increment count
         }
      }
   return lengths
end