Как реализовать шаблон "Русская кукла" в Ocaml?

В Javascript есть шаблон, называемый шаблоном «Русская кукла» (его также можно назвать «одноразовым»). По сути, это функция, которая в какой-то момент заменяет себя другой.

Простой пример:

var func = function(){ 
  func = function(){ console.log("subsequent calls call this...");};
  console.log("first call");
}

Итак, когда вы в первый раз вызываете func, она выводит «первый вызов», а в следующий (и последующие разы) выводит «последующие вызовы вызывают это ...». (это было бы легко сделать и в Scheme, например)

Я ломал голову над тем, как это сделать в Ocaml?

Изменить: одно решение, которое я придумал:

 let rec func = ref( fun () -> func := ( fun () -> Printf.printf("subsequent..\n"));Printf.printf("First..\n"));;

Называется как : ! func () ;;

Интересно, что если я не включу "rec" в определение, он никогда не вызовет последующую функцию ... Он всегда печатает "Сначала ...".

5
задан aneccodeal 20 March 2011 в 19:56
поделиться