Простая функция с внутренним состоянием - PullRequest
0 голосов
/ 10 февраля 2020

Я хотел бы написать минимальную функцию с внутренним состоянием. У него должна быть подпись f: () -> (), и n-й раз, когда она вызывается, должен вывести число n.

Я полагаю, что ссылки необходимы, но я не знаю, как их использовать для создания такой функции.

1 Ответ

0 голосов
/ 10 февраля 2020

Я нашел решение с внешней локальной ссылкой

local val mem = ref 0 in
fun f () = 
  let val _ = mem := !mem + 1 in print (Int.toString (!mem)) end
end

Решением несколько иной проблемы было бы создание функции

fun iter_int n =
let val i = ref 0
in  fn () => 
  let val j = !i 
  in  i := !i + 1 ; j 
  end 
end
...