Карта как глобальная переменная в Ocaml - PullRequest
2 голосов
/ 03 июля 2011

У меня вопрос по поводу манипулирования картой как глобальной переменной. В начале моего файла у меня есть:

module IntOrd = struct type t = int let compare = ( - ) end
module IntMap = Map.Make( IntOrd )

Затем я хочу объявить глобальную переменную let variables = IntMap.empty, тогда variables будет изменено в некоторых функциях этого файла. Например, в функции let analyze (p: s_program) : unit = я хочу заполнить variables некоторыми значениями в p. Но я не вижу, как это сделать, потому что кажется, что я больше не могу изменять variables; IntMap.add : key -> 'a -> 'a t -> 'a t также не будет работать, поскольку не изменяет непосредственно значения.

Нужно ли указывать эту глобальную переменную в качестве ссылки?

Может ли кто-нибудь помочь? Большое спасибо

Ответы [ 2 ]

3 голосов
/ 03 июля 2011

Ну, вы вроде как ответили на свой вопрос :).Вы хотите, чтобы это была переменная .Ocaml функционален, let x = ... не объявляет переменную (это постоянная привязка);чтобы получить переменную, вам нужно сделать ссылку.И тогда действительно вы можете изменить его в своих функциях, как в:

variables := IntMap.add foo bar !variables
2 голосов
/ 03 июля 2011

Да, если вы хотите изменить карту, вам нужно сделать ее справочной.Затем вы можете изменить его, используя variables := IntMap.add foo bar !variables.

...