Вы не можете сделать это функциональным способом, так как функция не будет чистой.
Вы можете использовать ref
, чтобы сохранить желаемое значение и изменить его в функции.
Например, эта функция, которая вычисляет a + b + X
, где X
увеличивается на 1 при каждом вызове функции:
let my_function =
let saved_value = ref 0 in
fun a b ->
saved_value := !saved_value + 1; (* Increment the value *)
a + b + !saved_value
let () = Printf.printf "First: %d\n" (my_function 1 2) (* 1 + 2 + 1 == 4 *)
let () = Printf.printf "Second: %d\n" (my_function 1 2) (* 1 + 2 + 2 == 5 *)