У меня есть следующий код:
let counter n =
let rec count i =
if i > n
then ()
else
print_int i;
count (i+1)
in count 0
Он должен просто вывести все числа от 0 до n.Чтобы уточнить, я знаю, что есть более простые способы достижения того же результата, но я хочу знать, почему он не работает в данном конкретном случае.Когда я запускаю этот код с некоторым параметром, например.counter 5
не заканчивается.
Вместо этого, когда я изменяю последнюю строку моего кода in count 0
на in Thread.create count 0
, он выводит 012345
Может кто-нибудь объяснить это поведение?
РЕДАКТИРОВАТЬ
Также обнаружено, что если вы измените код так:
let counter n =
let rec count i =
if i > n
then ()
else
let i = i
in print_int i;
count (i+1)
in count 0
, то он будет работать нормально.Почему это?