[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ShootOut] wordfreq.scm
;#!/usr/bin/env mzscheme -r
(require (lib "pregexp.ss")
(lib "string.ss")
(lib "list.ss"))
(define my-hash (make-hash-table 'equal))
(define (print-sorted-hash)
(let ((kv-lst '())
(display-elts
(lambda (lst) (map
(lambda (elt) (printf "~a~a~a~n" (cdr elt) #\tab (car elt)))
lst))))
; Build a list from the hash table
(hash-table-for-each my-hash
(lambda (key val) (set! kv-lst (cons (cons key val) kv-lst))))
; Sort the list
(display-elts (quicksort kv-lst (lambda (a b) (string<? (car a) (car
b)))))))
(define (load-hash vals)
(letrec
((do-entry-get (lambda (key)
(hash-table-get my-hash key
(lambda () (hash-table-put! my-hash key 0) 0))))
(do-entry-inc (lambda (key)
(hash-table-put! my-hash key (+ (do-entry-get key) 1)))))
(map do-entry-inc vals)))
(define (main args)
(do ((line (read-line) (read-line)))
((eof-object? line) (print-sorted-hash))
(string-lowercase! line)
(load-hash (pregexp-split " +"
(list->string (map (lambda (x)
(if (char-alphabetic? x) x #\space)) (string->list
line)))))))
(main (current-command-line-arguments))
> -----Original Message-----
> From: Jens Axel Søgaard [mailto:js@vgt-gym.dk]
> Sent: Wednesday, March 27, 2002 11:49 AM
> To: plt-scheme@fast.cs.utah.edu
> Subject: [ShootOut] sieve.bat
>
>
> ; @echo off
> ; mzscheme.exe -f sieve.bat -mvC %1
> ; goto :end
>
> (define (main args)
> (let ((n (if (null? args)
> 1
> (string->number (car args))))
> (count 0)
> (flags (make-vector 8192)))
> (let loop ((iter n))
> (if (> iter 0)
> (begin
> (do ((i 0 (+ i 1))) ((>= i 8192)) (vector-set!
> flags i #t))
> (set! count 0)
> (do ((i 2 (+ 1 i)))
> ((>= i 8192))
> (if (vector-ref flags i)
> (begin
> (do ((k (+ i i) (+ k i)))
> ((>= k 8192))
> (vector-set! flags k #f))
> (set! count (+ 1 count)))))
> (loop (- iter 1)))))
> (display "Count: ") (display count)))
>
> ; :end
>