Причина, по которой у вас, похоже, есть список «сброса», заключается в том, что с указанным кодом вы никогда не обновляете список. Каждый раз, когда вы в первый раз используете let x = y
, вы «затеняете» x
(подробнее здесь , здесь и здесь ), что означает, что вы объявляете новую переменную с именем x
и до тех пор, пока новая x
не выйдет из области видимости, заблокировав доступ к старой x
.
Один из способов исправить это состоит в том, чтобы сделать JobList изменяемым (объявите его с помощью let mutable jobList = []
- посмотрите здесь и здесь , чтобы узнать больше), но есть гораздо лучшие способы.
Если я понимаю, что вы хотите, по сути, вы хотите проверить каждое из случайных чисел и, если оно четное, поставить «Do» в это место в новом списке, но если это нечетно, поставить « Задача "вон там.
Самый простой способ сделать это - использовать List.map
с функцией, которая выполняет эту задачу. Таким образом, вы можете избавиться от цикла for и использовать вместо него что-то вроде:
let list = genRandomNumbers 8
printfn "Original: %A" list
let isEven x = (x % 2) = 0
let isOdd x = isEven x = false
let jobs = []
let evenDoOddTask i =
if (isEven i) then
"Do"
else
"Task"
let jobList = List.map evenDoOddTask list
(я бы также настоятельно рекомендовал не использовать 'list' в качестве имени переменной, но я предполагаю, что это только для примера).