#!/usr/local/bin/guile \ -e main -s !# ;;; $Id: wordfreq.guile,v 1.2 2001/06/29 23:12:37 doug Exp $ ;;; http://www.bagley.org/~doug/shootout/ ;;; from Brad Knotwell (use-modules (ice-9 string-fun) (ice-9 common-list)) (use-modules (ice-9 format)) (define my-hash (make-hash-table 4000)) (define (print-sorted-hash) (define (display-elt elt) (display (format "~7D\t~a\n" (car elt) (cdr elt)))) (map display-elt (sort-list (hash-fold (lambda (x y z) (cons (cons y x) z)) '() my-hash) (lambda (x y) (or (> (car x) (car y)) (and (= (car x) (car y)) (string>=? (cdr x) (cdr y)))))))) (define (load-hash x . tl) (define (do-entry entry) (let ((entry-val (hash-ref my-hash entry))) (hash-set! my-hash entry (if entry-val (1+ entry-val) 1)))) (map do-entry (remove-if (lambda (x) (string=? x "")) (cons x tl)))) (define (main args) (do ((line (read-line) (read-line))) ((eof-object? line) (print-sorted-hash)) (separate-fields-discarding-char #\space (list->string (map (lambda (x) (if (char-alphabetic? x) x #\space)) (string->list (string-downcase line)))) load-hash)))