Как изменить переменные типа в OCaml? - PullRequest
0 голосов
/ 01 декабря 2018

Предполагая, что у нас есть следующий тип и переменная типа:

type example_type = A | B | C of example_type * example_type * example_type
let ab = C(A, C(A, B))

Как мне удается вывести модификацию или модифицированную копию ab?
Например, должно быть выполнено следующее:
val ab : example_type = C(A, C(A, A)) или val new_ab : example_type = C(A, C(A, A))

1 Ответ

0 голосов
/ 01 декабря 2018

Значения типа 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.Создает новое значение.

...