我一直在尝试将我的一个简单的C#控制台应用程序改写为纯函数式F#代码(如果可能的话)。到目前为止,我已经成功地使用 Seq 将 while 块重新编写为“不变”的F#代码(类似于 Seq.initInfinite sequenceGenerator |> Seq.takeWhile condition | & gt; Seq.iter bodyOfWhileCycle )- 网站“ F# for Fun and Profit”是我的灵感来源。
然而,这次我遇到了一个简单的 while 块,在“可变”的F#中看起来像这样(并且它可以工作):
printfn "Type low OP number"
let mutable lowLimit = parseMe (Console.ReadLine())
printfn "Type high OP number"
let mutable highLimit = parseMe (Console.ReadLine())
let mutable myCondition = true
if highLimit > lowLimit then myCondition <- false
while myCondition do
printfn "Type low OP number again"
lowLimit <- parseMe (Console.ReadLine())
printfn "Type high OP number again"
highLimit <- parseMe (Console.ReadLine())
if highLimit > lowLimit then myCondition <- false
有没有人能帮我想办法将这个“可变的”while-do块重构成函数式风格?我的尝试并没有按照我想要的方式工作-我不知道如何从bodyOfWhileCycle函数中获取lowLimit1/highLimit1值。以下是我失败的一次尝试:
printfn "Type low OP number"
let lowLimit = parseMe (Console.ReadLine())
printfn "Type high OP number"
let highLimit = parseMe (Console.ReadLine())
let verifyingInputValues: unit =
let bodyOfWhileCycle _=
printfn "Type low OP number again"
let lowLimit1 = parseMe (Console.ReadLine())
printfn "Type high OP number again"
let highLimit1 = parseMe (Console.ReadLine())
()
fun _ -> highLimit - lowLimit
|> Seq.initInfinite
|> Seq.takeWhile ((>) 0)
|> Seq.iter bodyOfWhileCycle
verifyingInputValues