Более или менее случайно.
То, что происходит, это то, что вы используете cubed
на степень два, что приводит к большей степени два.После нескольких раундов результат будет достаточно большим для переполнения и усечения - и большие степени двойки будут обрезаться до нуля, что является фиксированной точкой этой функции.
Для полной ясности, OCamlне будет выполнять какой-либо сложный поиск или обман, fix
- это просто цикл, который в этом случае заканчивается полезным ответом.
Вы можете использовать #trace
на верхнем уровне, чтобы увидеть, как это происходит:
# #trace cubed;;
cubed is now traced.
# fix cubed 2
;;
cubed <-- 2
cubed --> 8
cubed <-- 8
cubed --> 512
cubed <-- 512
cubed --> 134217728
cubed <-- 134217728
cubed --> 0
cubed <-- 0
cubed --> 0
- : int = 0