guile 1.8またはguile 2を使用すると、次のコードはEOFを過去数行のように見せています。これが抽出プログラムである大きなプログラムでは、以前に読み込まれたデータが一見破壊されます。私はread-lineを使っているのか、eof-objectを間違ってテストしていますか?これは、発現させる問題について長い数行以上にする必要があるGuile Scheme過去のEOFを読むreadline read
1
2
3
# comment line
4
5
1
2
3
# comment line
4
5
1
2
3
# comment line
4
5
:ここ
(use-modules (ice-9 rdelim))
(define f
(lambda (p)
(let loop ((line (read-line p)))
(format #t "line: ~a\n" line)
(if (not (eof-object? (peek-char p)))
(begin
(let ((m (string-match "^[ \t]*#" line)))
(if m
(begin
(format #t "comment: ~a\n" (match:string m))
(loop (read-line p))
)))
(format #t "read next line\n")
(loop (read-line p)))))))
(define main
(lambda()
(let ((h (open-input-file "test")))
(f h))))
は、最小限のサンプルダミー入力ファイルです。コード例の長さについてお詫び申し上げますが、この問題は、コードがこの量の複雑さになっても(わずかながら)発生します。
あなたがコメントを見つけたら反復ごとに_two lines_を読んでいます。解決策を構成する別の方法について私の答えを見てください。 –