CLIアプリケーションの通常のパターンは、ユーザーがいくつかのquitコマンドを入力するまで、無限ループで実行することです。同様に、C言語で:F#で、このようなコンソールアプリケーションのためのパターンであるものFの無限メインループ
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
(テールrecursrionを使用しようとしましたが、失敗しましたか)?
CLIアプリケーションの通常のパターンは、ユーザーがいくつかのquitコマンドを入力するまで、無限ループで実行することです。同様に、C言語で:F#で、このようなコンソールアプリケーションのためのパターンであるものFの無限メインループ
while(1){
scanf("%c", &op);
...
else if(op == "q")
break;
}
(テールrecursrionを使用しようとしましたが、失敗しましたか)?
ブラウザでタイプする、これ含みうるエラー:
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()
while true do
(* ..code.. *)
しかし、私が推測するには、末尾再帰は、より多くの空想が(彼らは両方の--optimize
の下で同じものをコンパイルします)です。
このような機能が有用であることができます。
let rec forever f =
f()
forever f
使用法:
forever <| fun() ->
//function body
あなたのコードの多くの直訳、しかし、次のようになります。
while true do
//body
素敵な構文ですが、終了条件を欲しいときはあまり実用的ではありません。 –
ここでは何もませんシングルキープレスに応答するブロッキングバージョン。
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()
テール再帰がオンでない場合、これはスタックオーバーフローしますか? – Maslow