ocaml - функция без аргументов и глобальных переменных - PullRequest
2 голосов
/ 19 апреля 2011

У меня есть задача, которую нужно выполнить в ocaml, и я не могу найти никакой справочной информации, поэтому спрашивайте здесь;) Как определить функцию, которая дает нам что-то другое в каждом вызове, без использования глобальных переменных? Я хотел бы сделать fun next (), которые возвращают следующие нечетные числа или следующие значения факториала.

Как это

# next();;
- : int = 1
# next();;
- : int = 3
# next();;
- : int = 5
# next();;
- : int = 7

У вас есть какие-нибудь советы для меня?

Заранее спасибо

Грег

1 Ответ

5 голосов
/ 19 апреля 2011
let next =
  let private_counter = ref (-1) in
  fun () ->
    private_counter := !private_counter + 2;
    !private_counter

Вы также можете заключить это в «фабрику счетчиков»:

let make_counter () =
  (* note the () parameter : at each call of make_counter(),
     a new "next function" with a fresh counter is generated *)
  let private_counter = ...
...