CLI应用程序的常用模式是在无限循环中运行,直到用户键入一些quit命令。就像在C语言中一样:
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
F#中这样的控制台应用程序的模式是什么(尝试使用尾递归,但是失败了)?
答案 0 :(得分:10)
在浏览器中输入,可能包含错误:
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()
答案 1 :(得分:10)
这是一个非阻止版本,可响应单键按下。
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()
答案 2 :(得分:5)
这样的功能很有用:
let rec forever f =
f()
forever f
用法:
forever <| fun () ->
//function body
然而,代码的更直译是:
while true do
//body
答案 3 :(得分:4)
另外
while true do
(* ..code.. *)
但我觉得尾递归更加花哨(他们都会在--optimize
下编译成同样的东西)。