Использование кортежей в качестве параметров, как это не является общим в OCaml. Обычно вы будете использовать каррирование и определить свою функцию, как это:
let get_nth list n = ...
Это будет иметь подпись 'a list -> int -> 'a
. Также обратите внимание, что здесь у вас есть параметр 'a
, а это означает, что нет никаких оснований ограничивать вашу функцию только одним.
Теперь давайте рассмотрим проблему. Если вы хотите получить нулевой элемент, как бы выглядела ваша функция?
let get_nth list 0 = List.head list (* this is not actually valid in OCaml *)
теперь, если у вас есть функция, чтобы получить п-й элемент из списка м элементов (NB п> т), как вы могли бы использовать эту функцию, чтобы построить еще одну функцию, которая получит это п + первый элемент из список m + 1 элементов? Пусть эта функция для п + 1 элементов быть get_nth'
let get_nth' list n' = get_nth (List.tail list) (n'-1)
Теперь все, что вам нужно сделать, это объединить два, и вы сделали. Я оставлю эту последнюю часть тебе.
Если вы последуете этому совету, вы получите нечто более сложное, чем это должно быть. Однако легче понять, что происходит в этом направлении.
Это действительно звучит как домашняя проблема. Это поможет, если вы продемонстрируете какой-то код, который вы пробовали, который работает не так, как вы надеялись. –