Переходя к OCaml из Lisp, я очень смущен тем, когда функции возвращаются, а когда нет. Я скучаю по своей волшебной цитате! К счастью, в большинстве случаев OCaml, кажется, автоматически знает, когда я хочу, чтобы функция оценивалась, а когда нет. Однако я часто обнаруживаю, что пытаюсь назначить возвращаемое значение функции в выражении let, как показано ниже.
let start = Sys.time in
(*
* do something here
*)
;
let ending = Sys.time in
Printf.printf "did something in %f seconds\n" (ending -. start)
но затем ocamlc жалуется
Error: This Expression has type unit -> float
but an expression was expected of type float
Сообщая мне, что начало и конец привязаны к Sys.time
, а не возвращаемое значение Sys.time
.
Это поведение, которое я пытаюсь получить, не связано с OCamly? Хочу ли я делать что-то по-другому? Мне просто не хватает чего-то совершенно очевидного?