gpt4 book ai didi

recursion - F# 从控制台读取输入

转载 作者:行者123 更新时间:2023-12-03 06:58:58 24 4
gpt4 key购买 nike

我编写的代码有一个小问题,它是为了从 F# 中的控制台读取输入作为行序列。我的问题是它只读取 5 行文本然后结束,但它应该读取更多行。如果有人告诉我这段代码有什么问题,那就太好了。

screen from console

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

最佳答案

您只能获取前 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

关于recursion - F# 从控制台读取输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54082526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com