为什么这个列表在Racket中只有无效项目

rns*_*nso 2 scheme input racket

我尝试使用此页面上的代码来实现用户输入功能:简单的Racket终端交互

(define entry_list (for/list ([line (in-lines)]
           #:break (string=? line "done"))
  (println line)))

(println entry_list)
Run Code Online (Sandbox Code Playgroud)

输出是:

this 
"this "
is 
"is "
a 
"a "
test
"test"
for testing only
"for testing only"
done
'(#<void> #<void> #<void> #<void> #<void>)
Run Code Online (Sandbox Code Playgroud)

为什么列表只包含"无效"项?

hug*_*omg 5

那是因为println函数返回#<void>.如果不是println而是为每一行添加了返回不同值的内容,那么最终会得到一个更有趣的列表.

例如,以下代码应返回包含您键入的行的列表:

(define entry_list
  (for/list ([line (in-lines)]
             #:break (string=? line "done"))
    line))
Run Code Online (Sandbox Code Playgroud)

如果你只想打印线条,那么你可以使用for而不是for/list,以避免在最后创建一个无用的空洞列表: