[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
>