общая функция высокого порядка таймера в OCaml

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

  • той же арностью и типами входных параметров , и
  • возвращаемый тип float * 'r, где float будет показателем времени, проведенного в функции (например, сообщается Sys.time())

Проблема в том, что я не могу реализовать его таким образом, чтобы он мог обрабатывать функции любой арности. Например. следующий код:

let timer f =              
   let timerf x y =                                 
      let t0 = Sys.time ()                                         
      in let result = f x y                                                 
      in let diff = Sys.time() -. t0                                     
      in diff, result                                    
   in timerf    

работает только с функциями входной арности 2. Мне не очевидно, как обобщить его для обработки функций любой арности. Я надеялся, что приложения с частичными функциями каким-то волшебным образом решат эту загадку, но я не могу заставить их работать.

7
задан pad 6 April 2012 в 21:52
поделиться