我想从标准输入读取元素,但我不知道如何停止当我插入一条新线。 这里是我的代码:球拍 - 从标准输入读取,直到新线
(define readNext
(lambda (tmp)
(let ([a (read)])
(if (equal? a ??????)
tmp
(readNext (cons (read) tmp))))))
我想从标准输入读取元素,但我不知道如何停止当我插入一条新线。 这里是我的代码:球拍 - 从标准输入读取,直到新线
(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
将读取整个数据。 如果你想阅读字符,直到你点击换行符, ,你将不得不一次一个字符。
换行符写为#\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
或类似的方法可以对正在读取的行更有用。
您可以使用'(读线)'读取一行,然后使用'open-input-string'将其提供给'read'。我不认为可以将'read'配置为不像其他类型的空白那样消耗换行符,尽管使用readtable可能是可行的吗?我不确定这是否会起作用。 –
它只会读取第一个元素。 – zaig
实际上它可以工作 – zaig