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

Why this list has only void items in Racket

我尝试使用此页面上的代码让用户输入功能:

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

(println entry_list)

输出为:

this 
"this "
is 
"is "
a 
"a "
test
"test"
for testing only
"for testing only"
done
'(#<void> #<void> #<void> #<void> #<void>)

为什么列表只包含 "void" 项?

那是因为println函数returns #<void>。如果你不使用 println 而是为每一行输入 return 不同的值,你最终会得到一个更有趣的列表。

例如,以下代码应该 return 包含您输入的行的列表:

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

如果您只想打印这些行,那么您可以使用 for 而不是 for/list,以避免在末尾创建无用的空白列表: