我的代码有一个小问题,我编写的代码是用于读取F#中控制台输入的行序列。 我的问题是它只读取5行文本,然后结束,但应该读取更多行。如果有人告诉我这段代码有什么问题,那将很好。
let allList = new List<string>()
let rec readlines () = seq {
let line = Console.ReadLine()
let b = allList.Add(line)
if line <> null then
yield line
yield! readlines ()
}
let b = readlines()
printf "%A" b
答案 0 :(得分:6)
您只会得到前5行,因为readlines
的结果是一个没有完全求值的惰性序列-打印序列仅输出前5个元素,因此所有要求值的东西。
通过运行以下示例,您可以轻松地看到事情是这样的:
let test =
seq { for i in 0 .. 1000 do
printfn "Returning %d" i
yield i }
printfn "%A" test
一个简单的解决方法是通过转换为内存列表来完全评估延迟序列:
let b = readlines() |> List.ofSeq
printf "%A" b
或者,您也可以使用for
循环遍历各行,并逐行打印它们:
for line in readlines() do
printf "%s" line