tailの実装
Posted feedbacks - Scheme
愚直にキューをつかって。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | (use gauche.parseopt)
(use gauche.selector)
(use util.queue)
(define (main args)
(let-args (cdr args)
((nlines "n=n" 10)
(f? "f" #f)
. argv)
(call-with-input-file (car argv)
(lambda (iport)
(let ((q (make-queue)))
(let loop ((n 0)
(line (read-line iport)))
(unless (or (= n nlines) (eof-object? line))
(enqueue! q line)
(loop (+ n 1) (read-line iport))))
(do ((line (read-line iport) (read-line iport)))
((eof-object? line))
(enqueue! q line)
(dequeue! q))
(for-each print (queue->list q)))
(when f?
(with-signal-handlers ((SIGINT => (lambda _ (exit 0))))
(lambda ()
(let ((sel (make <selector>)))
(selector-add! sel
iport
(lambda (input _)
(and-let* ((line (read-line input))
((not (eof-object? line))))
(print line))
(sys-sleep 1))
'(r))
(while #t (selector-select sel))))))
0))))
|


takeru #6818() Rating-9/11=-0.82
'tail'を実装してください。
巨大なファイルでも効率的に動作するようにしてください。
最低限必要な機能は、
です。
[ reply ]