В F # требуется только ;;
для завершения выражений в интерактивном режиме.
;;
осталось от перехода от OCaml, где, в свою очередь, осталось от Caml Light. Первоначально ;;
использовался для окончания «фраз» верхнего уровня - то есть let
, type
и т. Д. OCaml сделал ;;
необязательным, поскольку типичный модуль состоит из серии операторов let
с возможно один оператор в конце для вызова основной функции. Если вы отклоняетесь от этого шаблона, вам нужно отделить операторы с помощью ;;
. К сожалению, в OCaml, когда ;;
является необязательным по сравнению с обязательным, трудно учиться.
Однако F # вводит две соответствующие модификации синтаксиса OCaml: отступ и do
. Операторы верхнего уровня должны идти внутри блока do
, а для блоков требуется отступ, поэтому F # всегда знает, что каждый оператор верхнего уровня начинается с do
и отступа и заканчивается отступом. Не более ;;
требуется.
В целом, все, что вам нужно знать, это то, что синтаксис [O '] Caml отстой, и F # устраняет многие его проблемы, но поддерживает много путаницы с обратной совместимостью. (Я считаю, что F # все еще может компилировать много кода OCaml.)
Примечание. Этот ответ основан на моем опыте работы с OCaml и ссылкой, которую Адам Гент опубликовал (что, к сожалению, не очень полезно, если вы не знаете OCaml).