stdin要素から要素を読み込みたいが、新しい行を挿入するときにどのように停止するかわからない。Racket - stdinから新しい行までを読み取る
(define readNext
(lambda (tmp)
(let ([a (read)])
(if (equal? a ??????)
tmp
(readNext (cons (read) tmp))))))
stdin要素から要素を読み込みたいが、新しい行を挿入するときにどのように停止するかわからない。Racket - stdinから新しい行までを読み取る
(define readNext
(lambda (tmp)
(let ([a (read)])
(if (equal? a ??????)
tmp
(readNext (cons (read) tmp))))))
は私が期待どおりに動作解決策を見つけた: はここに私のコードです。
(define a (open-input-string (read-line)))
(define readNext
(lambda (tmp)
(let ([b (read a)])
(if (equal? b eof)
tmp
(readNext (append tmp (list b)))))))
(readNext '())
編集:それはnewline
に停止しませんが、eof
機能read
のための全体データムを読み込みます。 改行するまで文字を読みたい場合は、 を一度に1文字ずつ使用する必要があります。
改行文字は#\newline
と書かれています。このような
何か:
#lang racket
(define read-a-line-as-list
(lambda()
(let ([c (read-char)])
(if (equal? C#\newline)
'()
(cons c (read-a-line-as-list))))))
(define read-a-line
(lambda()
(list->string (read-a-line-as-list))))
(read-a-line)
私が最も慣用的であってもよいが、それが動作しない場合があります。この
(for ((_ (in-naturals)))
(define l (read-line))
#:break (eof-object? l)
(displayln l))
ようにそれをやっています。 for/list
などを使用して、読み込み中の行にもっと便利な処理をしてください。
'(read-line)'を使って1行を読み込んでから、 'open-input-string'を使って' read'に送ることができます。他の種類の空白のように改行を消費しないように 'read'を設定することは可能ですが、読み込み可能なテーブルを使って行うことは可能でしょうか?それが実際に動くかどうかは分かりません。 –
最初の要素だけが読み込まれます。 – zaig
実際に動作する可能性があります – zaig