Как я могу определить конкретный тип для изменяемой переменной? - PullRequest
1 голос
/ 11 марта 2019

Я новичок в OCaml.Я хочу скомпилировать этот код, но получаю ошибку.

type pointeur_de_code = int;;
type environnement = int;;
type mlvalue =
 | Ml1 of int
 | Ml2 of pointeur_de_code * environnement;;
let (accu:mlvalue) = ref 0;;

Это выражение имеет тип int ref, но ожидалось выражение типа mlvalue

1 Ответ

2 голосов
/ 11 марта 2019

Когда вы определяете тип варианта, такой как mlvalue, вы определяете конструкторы для значений типа. У вас есть конструктор с именем Ml1, который принимает int и создает значение. И у вас есть конструктор с именем Ml2, который принимает два int с и создает значение.

Чтобы сделать значение типа, вам нужно включить конструктор.

Кроме того, тип вашего accu не может быть mlvalue. Это должно быть mlvalue ref, это другой тип.

let accu : mlvalue ref = ref (Ml1 0)

(Обратите внимание, что вам не нужно указывать тип accu. OCaml определит тип для вас.)

...