Как отмечается в комментариях, немного сбивает с толку, что вы используете тип Nat
- это пользовательский тип, определенный где-то в используемой вами библиотеке, а не стандартный тип F #.Вы должны быть в состоянии заставить вещи работать с вашим типом Nat
, но я просто упросту вещи и буду использовать целое число.
Теперь ваш код почти верен.Единственная проблема заключается в том, что List.fold
принимает функцию для объединения текущего состояния со следующим элементом (это ваш max
), но ему также необходимо начальное состояние.Это должно быть число, которое меньше всего в вашем списке.Если у вас просто положительные числа, вы можете использовать ноль:
let max a b : int = if a > b then a else b
let maxofList = List.fold max 0 // Added '0' as an extra parameter here!
let maximum (xs: int list): int = maxofList xs
В вашем случае это, вероятно, будет 0N
.В качестве альтернативы вы можете использовать List.reduce
, который принимает первый элемент списка в качестве начального значения и завершается неудачно, если список пуст:
let maxofList = List.reduce max