Мне нужно сделать функцию, которая превращает случайный пиксель на изображении в черный. Картинка представлена в виде множества цветов, представленных в черном или белом цвете. Вот мой код:
type color = Black | White
;;
type picture = color array array
;;
let rec color_rand_point (img : picture) : picture =
let randx = ref (Random.int (Array.length img))
and randy = ref (Random.int (Array.length img)) in
if (img.(!randx).(!randy) = White)then
begin
Array.set img.(!randx) (!randy) Black;
end
img
else
color_rand_point(img)
;;
Вот результат, который я получаю, когда пытаюсь скомпилировать:
Lines 5-7, characters 4-7:
5 | ....begin
6 | Array.set img.(!randx) (!randy) Black;
7 | end
Error: This expression has type unit
This is not a function; it cannot be applied.
#
Я почти уверен, что ответ будет очевиден для всех, кто разбирается в ocaml и что это плохой стиль, но я работаю над этим, будучи студентом, и понятия не имею о том, что я делаю с ocaml. Мы не изучали основы глубоко, поэтому я хотел бы получить простой ответ, если это возможно.
Я понятия не имею, почему Array.set не рассматривается как функция, применимая в императивном блоке c.