;;; TAIL -- One of the Kernighan and Van Wyk benchmarks. (library (rnrs-benchmarks tail) (export main) (import (rnrs) (rnrs-benchmarks)) (define inport #f) (define outport #f) (define (readline port line-so-far) (let ((x (read-char port))) (cond ((eof-object? x) x) ((char=? x #\newline) (list->string (reverse (cons x line-so-far)))) (#t (readline port (cons x line-so-far)))))) (define (tail-r-aux port file-so-far) (let ((x (readline port '()))) (if (eof-object? x) (begin (display file-so-far outport) (close-output-port outport)) (tail-r-aux port (cons x file-so-far))))) (define (tail-r port) (tail-r-aux port '())) (define (go) (set! inport (open-input-file "bib")) (set! outport (open-file-output-port "foo" (file-options no-fail) 'block (native-transcoder))) (tail-r inport) (close-input-port inport)) (define (main . args) (run-benchmark "tail" tail-iters (lambda (result) #t) (lambda () (lambda () (go))))))