Переменные в OCaml объявлены и неизменны.
Основная причина этого заключается в том, что неинициализированные переменные являются источником ошибок:
int x; // not initialized
read_and_use(x); // error
Удостоверившись, что ваши переменные всегда инициализируются, вы можете быть уверены, что в вашем коде не может быть никакого несанкционированного значения.
Другим моментом этого является неизменность (которая поставляется с декларативными заявлениями):
let x = 4;; (* Declare x *)
let f y = x + y;; (* Use x *)
let x = 5;; (* Declare a new variable with the same name as x *)
assert (f 10 = 14);; (* The x = 4 definition is used, as x is immutable *)
Поскольку переменные являются константами, объявление их инициализированными приведет к созданию постоянно недопустимых переменных. И это довольно бесполезно.
Тот факт, что переменные в OCaml (и большинстве функциональных языков) устанавливаются один раз и только один раз, может поначалу показаться странным, но на самом деле это не меняет выразительность вашего языка и помогает сделать ваш код понятным и безопасным.