[прим. пер.: продолжение перевода, первая статья
тут]
Структура программ на OCaml
Теперь мы потратим немного времени на высокоуровневый анализ некоторых настоящих программ на OCaml'е. Я хотел бы показать вам локальные и глобальные определения, разницу в использовании
;;
и ;
, модули, вложенные функции, ссылки. Из-за этого мы столкнёмся с множеством концепций OCaml'а, которые пока что не имеют смысла для начинающего изучать OCaml, так как мы не встречали их ранее. Не фокусируйтесь на них, сконцентрируйтесь вместо этого на общем представлении о формате программ и особенностях языка, на которые я буду указывать.
Локальные «переменные» (на самом деле локальные выражения)
Возьмём нашу функцию
average
на Си и добавим в неё локальные переменные (сравните её с примером в прошлой главе).
double average (double a, double b)
{
double sum = a + b;
return sum / 2;
}
Теперь посмотрим на это для OCaml:
let average a b =
let sum = a +. b in
sum /. 2.0;;
Стандартное выражение
let name = expression in
используется для определения локального именованного выражения и
name
может быть использовано в дальнейшем вместо expression вплоть до
;;
, который означает окончание локального блока кода. Обратите внимание, мы даже не использовали отступ после объявления
in
. Просто воспринимайте
let ... in
так, как будто это один оператор.