CLI 应用程序的一个常见模式是无限循环运行,直到用户键入一些退出命令。就像,在 C 语言中:
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
F# 中此类控制台应用程序的模式是什么(尝试使用尾递归,但失败)?
CLI 应用程序的一个常见模式是无限循环运行,直到用户键入一些退出命令。就像,在 C 语言中:
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
F# 中此类控制台应用程序的模式是什么(尝试使用尾递归,但失败)?
在浏览器中输入,因此可能包含错误:
let rec main() =
let c = System.Console.ReadKey()
if c.Key = System.ConsoleKey.Q then () // TODO: cleanup and exit
else
// TODO: do something in main
main()
这是一个响应单键按下的无阻塞版本。
open System
let rec main() =
// run code here
// you may want to sleep to prevent 100% CPU usage
// Threading.Thread.Sleep(1);
if Console.KeyAvailable then
match Console.ReadKey().Key with
| ConsoleKey.Q -> ()
| _ -> main()
else
main()
main()
这样的功能可能很有用:
let rec forever f =
f()
forever f
用法:
forever <| fun () ->
//function body
但是,您的代码的更直译是:
while true do
//body
还
while true do
(* ..code.. *)
但我猜尾递归更花哨(它们都会在 下编译成相同的东西--optimize
)。