Io 如何从控制台读取所有行并在Scheme中将它们输出到控制台?

Io 如何从控制台读取所有行并在Scheme中将它们输出到控制台?,io,scheme,Io,Scheme,我想从控制台读取所有行并将它们放入列表中,如何在Scheme中执行 例如,当程序运行时,用户将在控制台中输入许多行: aaaa 1111 bbbbb ccc 2323 dddd 4444 我的方案代码将读取所有数据并过滤这些数字,然后将它们输出到控制台 如何做到这一点?这里有一个函数,它保持从默认输入端口读取数据,并将其显示到默认输出端口 (define (read-and-display) (let ((x (read))) (if (not (eof-object? x))

我想从控制台读取所有行并将它们放入列表中,如何在Scheme中执行

例如,当程序运行时,用户将在控制台中输入许多行:

aaaa
1111
bbbbb
ccc
2323
dddd
4444
我的方案代码将读取所有数据并过滤这些数字,然后将它们输出到控制台


如何做到这一点?

这里有一个函数,它保持从默认输入端口读取数据,并将其显示到默认输出端口

(define (read-and-display)
  (let ((x (read)))
    (if (not (eof-object? x))
      (begin
        (display x)
        (newline)
        (read-and-display)))))
如果您的方案实现支持
,除非
,则上述功能可以简化为:

(define (read-and-display)
  (let ((x (read)))
    (unless (eof-object? x)
        (display x)
        (newline)
        (read-and-display))))

您可以简单地使用
(除非)
,而不是
(if(not)(begin))
习惯用法,它会更简短、更清晰。@scarLópez,
除非是方案标准的一部分吗?如果是,请同意您的看法,使用
,除非
是一个更好的选择。这不是标准,但在许多解释器中非常常见,如果不存在,很容易实现为宏-我打赌您的解释器已经有了它;)。与
when
相同,它就像
除非
但没有
not
部分。@ÓscarLópez
when
除非
是R6RS和R7RS的标准。