私はこの関数で無限ループに陥っています:
let rec showGoatDoorSupport(userChoice, otherGuess, aGame) =
if( (userChoice != otherGuess) && (List.nth aGame otherGuess == "goat") ) then otherGuess
else showGoatDoorSupport(userChoice, (Random.int 3), aGame);;
そして、これが私が関数を呼び出す方法です:
showGoatDoorSupport(1, 2, ["goat"; "goat"; "car"]);
関数の最初の条件で、最初の 2 つの入力パラメーター (1 と 2) が異なる場合は比較し、リスト内のインデックス "otherGuess" の項目が "goat" と等しくない場合は、それを返したいその他推測。
それ以外の場合は、2 番目の入力パラメーターとして 0 ~ 2 の乱数を使用して関数を再度実行したいと考えています。
ポイントは、2 番目のパラメーターが最初のパラメーターと等しくなく、リスト内のそのスロットが「ヤギ」でなくなるまで関数の実行を試み続け、そのスロット番号を返すことです。