Переменная 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