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