# -*- mode: icon -*- # $Id: wordfreq.icon,v 1.1 2000/12/25 06:58:04 doug Exp $ # http://www.bagley.org/~doug/shootout/ procedure main(argv) local wcount, buckets, w, c, pair, wl wcount := table(0) every wcount[words()] +:= 1 buckets := table() every w := key(wcount) do { c := wcount[w] / buckets[c] := list() push(buckets[c], w) } buckets := sort(buckets,1) while pair := pull(buckets) do { c := pair[1] wl := sort(pair[2],1) while (write(right(c,7), "\t", pull(wl))) } end procedure words() local line, word while line := read() do { line := map(line) line ? while tab(upto(&letters)) do { word := tab(many(&letters)) suspend(word) } } end