Взгляните на модуль List
: http://caml.inria.fr/pub/docs/manual-ocaml/libref/List.html, в частности, метод exists
.Для того, что вы хотите, вы можете просто сделать это:
List.exists (fun x -> not x) [true;true;...;false;...]
Функция exists
вернет true, если какой-либо элемент в списке удовлетворяет предикату (функция).В этом случае предикатом будет fun x -> not x
, который вернет истину, если x
будет ложью.
Для общего доступа к списку вы обычно делаете это с помощью сопоставления с образцом и рекурсии или с использованием функций iter
map
, fold_left
и fold_right
(среди прочих).Вот реализация exists
с использованием сопоставления с шаблоном:
let rec exists f l = match l with
| [] -> false (* the list is empty, return false *)
| h::t -> if (f h) then true (* the list has a head and a (possibly empty) tail. Check the return value of the predicate 'f' when applied to the head *)
else exists f t (* the predicate is false, recursively call the `exists` function on the tail *)
edit: как написал Чак, вместо fun x -> not x
вы можете просто использовать not
.
Другая возможностьиспользовать функцию mem
:
List.mem false bools