Я пытаюсь немного изучить образ мышления функционального программирования на F #, так что любые советы приветствуются. Прямо сейчас я делаю простую рекурсивную функцию, которая принимает список и возвращает элемент i: th.
let rec nth(list, i) =
match (list, i) with
| (x::xs, 0) -> x
| (x::xs, i) -> nth(xs, i-1)
Сама функция вроде работает, но предупреждает меня о неполном шаблоне. Я не уверен, что возвращать, когда в этом случае сопоставлю пустой список, поскольку, если я, например, сделаю следующее:
| ([], _) -> ()
Вся функция рассматривается как функция, которая принимает в качестве аргумента единицу. Я хочу, чтобы она рассматривалась как полиморфная функция.
Пока я занимаюсь этим, я могу также спросить, насколько разумно зайти, чтобы проверить правильность аргументов при проектировании функции при серьезной разработке. Должен ли я проверять все, чтобы предотвратить «неправильное использование» функции? В приведенном выше примере я мог бы, например, указать функцию для попытки доступа к элементу в списке, который больше его размера. Надеюсь, мой вопрос не слишком запутан:)