如何在OCaml中更改类型变量?

时间:2018-12-01 05:32:56

标签: syntax ocaml

假设我们具有以下类型和类型变量:

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 :(得分:2)

example_type类型的值是不可变的。 OCaml中的变量(例如ab)也是不可变的。因此,您无法更改绑定到ab的值,也不能更改值本身的内部。

在函数式编程中,您可以计算新值而不是修改旧值。

对于价值而言,您的示例值对于声明的example_type无效。 C构造函数采用3个值,但是只有2个。

此外,ab只是一个变量,而不是类型变量。这是绑定到类型example_type的值的名称。

这是一个从类型B的值中消除所有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。它构造了一个新值。