Проверка всех значений в матрице ocaml - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть эта матрица:

let arr = Array.make_matrix 4 4 0;;

и что проверить, если все элементы равны 0.
Я слышал о функции for_all , но не могу понять, как использовать ее с матрицей, поскольку она ожидает массив int или список int.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2018

Матрица - это массив массивов (или массив строк, если вы предпочитаете). Поэтому вам нужно выполнить for_all в каждой из строк, чтобы проверить, что все элементы строки равны нулю, и еще один внешний for_all, чтобы проверить, что все for_all над строками истинны:

let arr = Array.make_matrix 4 4 0 in
Array.for_all (fun row ->
  Array.for_all ((=) 0) row) arr
0 голосов
/ 10 ноября 2018

Согласно документации (https://caml.inria.fr/pub/docs/manual-ocaml/libref/Array.html), здесь есть все, что вам нужно знать:

val for_all : ('a -> bool) -> 'a array -> bool

Array.for_all p [|a1; ...; an|] проверяет, все ли элементы массива удовлетворяют предикату p. То есть возвращается (p a1) && (p a2) && ... && (p an).

Пример: Array.for_all ((=) 0) имеет тип int array -> bool и проверяет, все ли элементы равны нулю.

...