Raf*_*al 3 recursion f# console.readline
我的代码有点问题,我写的是用于从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
Run Code Online (Sandbox Code Playgroud)
你只得到前5行,因为结果readlines
是一个懒惰的序列没有完全评估 - 打印序列只打印前5个元素,所以所有得到的评估.
通过运行以下示例,您可以轻松地看到这是事情的工作方式:
let test =
seq { for i in 0 .. 1000 do
printfn "Returning %d" i
yield i }
printfn "%A" test
Run Code Online (Sandbox Code Playgroud)
一个简单的解决方法是通过转换为内存列表来完全评估延迟序列:
let b = readlines() |> List.ofSeq
printf "%A" b
Run Code Online (Sandbox Code Playgroud)
或者,您也可以使用for
循环遍历这些行并逐个打印:
for line in readlines() do
printf "%s" line
Run Code Online (Sandbox Code Playgroud)