приведенный ниже код будет работать для списка (поэтому не для любой последовательности, но похоже, что последовательность, которую вы используете, может быть списком)
let rec removeOne value list =
match list with
| head::tail when head = value -> tail
| head::tail -> head::(removeOne value tail)
| _ -> [] //you might wanna fail here since it didn't find value in
//the list
РЕДАКТИРОВАТЬ: код обновлен на основе правильного комментария ниже. Спасибо P
РЕДАКТИРОВАТЬ: После прочтения другого ответа я подумал, что предупреждение будет в порядке. Не используйте приведенный выше код для последовательностей бесконечности, но, так как, я думаю, у ваших игроков нет кубиков бесконечности, это не должно быть проблемой, но для полноты здесь есть реализация, которая будет работать (почти) для любых
конечная последовательность
let rec removeOne value seq acc =
match seq.Any() with
| true when s.First() = value -> seq.Skip(1)
| true -> seq.First()::(removeOne value seq.Skip(1))
| _ -> List.rev acc //you might wanna fail here since it didn't find value in
//the list
Однако я рекомендую использовать первое решение, которое, я уверен, будет работать лучше, чем второе, даже если вам нужно сначала превратить последовательность в список (по крайней мере, для небольших последовательностей или больших последовательностей с искомым значением в конце)