whileループ

繰り返しの制御構文としては forループの他にwhileループがあります。 whileは、式1がtrueである間、式2を実行し続けます。
whileループ
while式 := while 式1 do 式2 done
軽量構文ではdoneを省略できます。 次の章で説明する参照型を用いれば C言語などでよくある次のようなループを記述できます。 F#6から推奨される書き方が変わっています。
1から10まで表示するループ
let a = ref 0 in
while a.Value < 10 do
    a.Value <- a.Value + 1
    printfn "%d" a.Value
done;;

1から10まで表示するループ(軽量構文)
let a = ref 0 in
while a.Value < 10 do
    a.Value <- a.Value + 1
    printfn "%d" a.Value
以前のF#の1から10まで表示するループ
let a = ref 0 in
while !a < 10 do
	a := !a + 1;
	printfn "%d" !a
done;;
以前のF#の1から10まで表示するループ(軽量構文)
let a = ref 0 in
while !a < 10 do
    a := !a + 1
    printfn "%d" !a
しかし、F#ではあまりこういう書き方はしません。 値を変更可能な変数を用いたプログラムは そうでないプログラムに比べて理解しにくく バグを起こしやすいためです。 この例であれば、次のように書くのが簡潔です
F#でのループ処理
let print_int = printfn "%d" in
List.iter print_int [1..10]
List.iterは2つの引数を取り 1つめには1引数の関数、2つめにはリストをとる関数です。 処理としては [1..10]で1から10までの数字からなるリストを生成し List.iterでそれぞれ数字を引数にしてprint_intを呼び出しています。 print_intは数値を入力として受け取り、その数値を出力する関数になります。 F#を含め、関数型言語では、このiter関数のように リストや配列の処理を行う関数が色々と用意されています。 これらを使いこなせるようになれば whileなどのループを使う機会は少なくなると思います。 whileを使うと、計算が終わらない無限ループもかけてしまうので 気をつけないといけません。
無限ループ
while true do printfn "%s" "never finish" done;;
最後に、以下のプログラムをもってwhileループの説明を終わります。
週末まで計算するループ(参考:Expert F#)
open System;;
while(DateTime.Now.DayOfWeek<>DayOfWeek.Saturday) do
 printfn "working";
 done;;
 printfn "result is 42"; //人生、宇宙、すべての答えでGoogle検索したら
週末まで計算するループ(軽量構文)
open System
while(DateTime.Now.DayOfWeek<>DayOfWeek.Saturday) do
    printfn "working";
printfn "result is 42"; //人生、宇宙、すべての答えでGoogle検索したら