Переменная OCaml, которая сохраняет значение между вызовами функций

Есть ли способ в OCaml для переменной внутри функции, чтобы сохранить ее значение между вызовами функции? Он должен работать как аргумент Pythons по умолчанию, который является ссылкой на один и тот же объект при каждом вызове функции, или функция должна давать результат, а не возвращать значение в явном виде. Эффект должен быть следующим (если функция должна была возвращать натуральные числа):

foo ();;
0
foo ();;
1

1 ответ

Решение

Да, это возможно. Вам нужно определить местный ref за пределами замыкания и обращайтесь к его значению и изменяйте его каждый раз, когда замыкание используется следующим образом:

let foo =
  (* local variable x *)
  let x = ref 0 in
  (* the closure that will be named foo *)
  fun () -> let r = !x in
            x := r+1; r
Другие вопросы по тегам