F #, насколько разумно заходить при проверке допустимых аргументов?

Я пытаюсь немного изучить образ мышления функционального программирования на F #, так что любые советы приветствуются. Прямо сейчас я делаю простую рекурсивную функцию, которая принимает список и возвращает элемент i: th.

let rec nth(list, i) =
    match (list, i) with
    | (x::xs, 0) -> x
    | (x::xs, i) -> nth(xs, i-1)

Сама функция вроде работает, но предупреждает меня о неполном шаблоне. Я не уверен, что возвращать, когда в этом случае сопоставлю пустой список, поскольку, если я, например, сделаю следующее:

| ([], _) -> ()

Вся функция рассматривается как функция, которая принимает в качестве аргумента единицу. Я хочу, чтобы она рассматривалась как полиморфная функция.

Пока я занимаюсь этим, я могу также спросить, насколько разумно зайти, чтобы проверить правильность аргументов при проектировании функции при серьезной разработке. Должен ли я проверять все, чтобы предотвратить «неправильное использование» функции? В приведенном выше примере я мог бы, например, указать функцию для попытки доступа к элементу в списке, который больше его размера. Надеюсь, мой вопрос не слишком запутан:)

6
задан Guy Coder 29 February 2016 в 15:02
поделиться