Возможно ли иметь функцию Ocaml, которая принимает только целочисленные списки? - PullRequest
1 голос
/ 12 апреля 2010

Я пишу рекурсивную функцию в Ocaml, которая должна подсчитывать количество элементов в целочисленном списке (да, я знаю, что есть функция List.length, но я пытаюсь сделать это самостоятельно). Однако компилятор / интерпретатор Ocaml заставляет меня все время использовать альфа-список.

Так что неправильно говорить, что когда функция принимает список в качестве параметра, тип этого списка всегда должен быть альфа? Спасибо

РЕДАКТИРОВАТЬ: причина, по которой мне неудобно использовать альфа-списки, заключается в том, что я не могу сравнить заголовок альфа-списка с целочисленным значением из-за жалоб на совпадение типов

1 Ответ

6 голосов
/ 12 апреля 2010

Легко:

 let length (lst : int list) = ...

Я немного сбит с толку, что сравнение сбивает вас с толку; сравнение с целым числом должно просто ограничить 'a до int. Например, в

let length lst = match lst with
  | x :: xs when x = 0 -> ...

lst будет иметь тип int list.

...