Прежде всего, альфа, иначе 'a
, не означает «что-нибудь», это переменная типа, которая должна рассматриваться в контексте. Например, в типе функции,
val find: ('k,'a) list -> 'k -> 'a
у нас есть две переменные типа 'k
и 'a
, где 'k
обозначает тип ключей, а 'a
обозначает тип значений. Следовательно, когда вы применяете эту функцию к какому-либо списку, например, find [1, "one"; 2, "two"]
, переменная 'k
будет установлена в int
и 'a
в string
, а тип этого выражения будет int -> string
.
Во-вторых, функция, которая проверяет, присутствует ли конкретный ключ или элемент в контейнере, обычно называется mem
. Это может быть легко реализовано с помощью функции find
, которая ищет элемент, например,
let mem ls k = try ignore (find ls k); false with Not_found -> true
Эта функция будет иметь тип ('k,'a) list -> 'k -> bool
.
В современном OCaml предпочтительнее использовать более явный тип 'a option
в качестве возвращаемого типа функции поиска, а не генерировать исключение, поскольку первый появляется в типе функции и его сложнее пропустить , Так что если у вас есть функция find
, возвращающая 'a option
, то реализация будет выглядеть так
let mem ls ks = match find ls k with None -> false | Some _ -> true