#!/usr/bin/env bash # -*- mode: scheme -*- exec guile $0 # !# (import (ice-9 rdelim) (ice-9 hash-table)) (define (count-or-unicode>? a b) (let ((numa (car a))(numb (car b))) (or (> numa numb) (and (= numa numb) (stringchar-set delimiters)) (define count (make-hash-table (inexact->exact 1e6))) (define (add-word next) (hash-set! count next (1+ (hash-ref count next 0)))) (let loop ((next (read-delimited delimiters port))) (unless (eof-object? next) (unless (string-every delimiters-set next) (add-word next)) (loop (read-delimited delimiters port)))) (sort! (hash-map->list (lambda (key val) (cons val key)) count) count-or-unicode>?)) (for-each (lambda (x) (format #t "~a\t~a\n" (cdr x) (car x))) (count-words (current-input-port)))