48 lines
1.1 KiB
Scheme
48 lines
1.1 KiB
Scheme
;;; WC -- One of the Kernighan and Van Wyk benchmarks.
|
|
|
|
(library (r6rs-benchmarks wc)
|
|
(export main)
|
|
(import (r6rs) (r6rs-benchmarks))
|
|
|
|
(define inport #f)
|
|
|
|
(define nl #f)
|
|
(define nw #f)
|
|
(define nc #f)
|
|
(define inword #f)
|
|
|
|
(define (wcport port)
|
|
(let ((x (read-char port)))
|
|
(if (eof-object? x)
|
|
(begin
|
|
(list nl nw nc))
|
|
(begin
|
|
(set! nc (+ nc 1))
|
|
(if (char=? x #\newline)
|
|
(set! nl (+ nl 1)))
|
|
(if (or (char=? x #\space)
|
|
(char=? x #\newline))
|
|
(set! inword #f)
|
|
(if (not inword)
|
|
(begin
|
|
(set! nw (+ nw 1))
|
|
(set! inword #t))))
|
|
(wcport port)))))
|
|
|
|
(define (go)
|
|
(set! inport (open-input-file "bib"))
|
|
(set! nl 0)
|
|
(set! nw 0)
|
|
(set! nc 0)
|
|
(set! inword #f)
|
|
(let ((result (wcport inport)))
|
|
(close-input-port inport)
|
|
result))
|
|
|
|
(define (main . args)
|
|
(run-benchmark
|
|
"wc"
|
|
wc-iters
|
|
(lambda (result) (equal? result '(31102 851820 4460056)))
|
|
(lambda () (lambda () (go))))))
|