let t = Unix.gettimeofday()
let rec nothing i =
match i with
| 1000000000 -> 1
| _ -> nothing (i+1)
let() = Printf.printf "%d %fs\n" (nothing 0) (Unix.gettimeofday() -. t)
Я использую командуКак правильно установить программу ocaml?
ocamlc unix.cma test.ml
скомпилировать его в байт-код. Время выполнения, видимо, несколько секунд, но программа печатает 0.000001s.
И если я заменил Unix.gettimeofday() на Sys.time(), то это всего лишь 0.000000s.
Выполнение кода в utop
не намного лучше. Это дает около 0,02 секунды, а я считаю не менее 5 с.
Мне интересно, что здесь не так? Я нахожусь в Debian Wheezy, а версия ocaml - 4.02.1.
Вы уверены, что 'Unix.gettimeofday()' оценивается перед 'nothing 0'? Я не знаю OCaml, но это не похоже на то, что это вообще. – Ryan
Почему нет? Я считаю, что он с нетерпением оценен. – user69818
Как говорит @ivg, порядок оценки аргументов функции * не указан *. Устремленность касается того, оцениваются ли они до вызова, а не порядка. –