Привет, ребята, у меня есть следующий фрагмент кода на C ++.
for (int i=0; i < nObstacles; i++)
{
int x,y;
bool bAlreadyExists;
do {
x = rand() % nGridWidth;
y = rand() % nGridHeight;
} while (HasObstacle(x, y));
SetObstacle(x, y, true);
}
Я могу без проблем перевести его на F #.
let R = new System.Random()
for i=0 to nObstacles do
let mutable bGoodToGo = false;
let mutable x =0;
let mutable y = 0
while not bGoodToGo do
x <-R.Next(nWidth)
y <-R.Next(nHeight)
bGoodToGo <- IsEmptyAt x y
board.[x,y]<-Obstacle;
Конечно, это, вероятно, заставит многих из вас съежиться, так как F # должен использоваться не так. В этом коде есть некоторые «некошерные» концепции для F #, такие как циклы do-while и изменяемые данные.
Но что мне было бы интересно увидеть, так это «правильный» перевод F # с неизменяемыми данными и своего рода эквивалент do-while.