Простая рекурсивная функция - OCAML - PullRequest
1 голос
/ 19 октября 2019

Может кто-нибудь взглянуть на то, что не так с моим кодом? Он все время говорит мне, что это вызовет переполнение стека.

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!

1 Ответ

1 голос
/ 19 октября 2019

Здесь вам нужно добавить круглые скобки вокруг сложения и вычитания:

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. Старшинство и ассоциативность

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...