Может кто-нибудь взглянуть на то, что не так с моим кодом? Он все время говорит мне, что это вызовет переполнение стека.
let rec to_ten x = if x = 10 then x else if x < 10 then to_ten x + 1 else to_ten x - 1 ;;
danke!
Здесь вам нужно добавить круглые скобки вокруг сложения и вычитания:
let rec to_ten x = if x = 10 then x else if x < 10 then to_ten (x + 1) else to_ten (x - 1)
В противном случае приоритет оператора делает to_ten x + 1 читаемым как ((to_ten x) + 1), что приводит к бесконечному циклу. См. 7.7.1. Старшинство и ассоциативность
to_ten x + 1
((to_ten x) + 1)