Значения типа example_type
являются неизменными.И переменные в OCaml (например, ab
) также неизменны.Таким образом, вы не можете изменить значение, к которому привязано ab
, или изменить внутренние значения самого значения.
В функциональном программировании вы вычисляете новые значения, а не изменяете старые.
Как бы то ни было, ваш пример значения не действителен для вашего example_type
, как объявлено.Конструктор C
принимает 3 значения, но у вас есть только 2.
Кроме того, ab
- это просто переменная, а не переменная типа.Это имя, привязанное к значению типа example_type
.
Вот функция, которая удаляет все B
s из значения типа example_type
.Вместо этого он заменяется на A
.
let rec replace_b x =
match x with
| B -> A
| A -> A
| C (p, q, r) ->
C (replace_b p, replace_b q, replace_b r)
Обратите внимание, что эта функция не изменяет свой параметр x
.Создает новое значение.