Ошибка «Out of stack space» при компиляции кодов в LearnOcaml - PullRequest
0 голосов
/ 18 января 2019

Любопытство: я писал коды в Learn Ocaml, и когда я компилировал свои коды, компилятор говорит: «Ошибка стека». Я думаю, это связано с количеством написанных мной кодов. Поэтому мне интересно, как я могу проверить, насколько заполнен стек? Я написал около 450-500 строк кодов. С парой новых строк. Это также может быть количество кодов, которые были выполнены в стеке, занимающем весь стек. Поэтому я просто хочу знать, в чем причина проблемы и как ее решить? Вот картинка, показывающая ошибку:

enter image description here

Ошибка исчезла, когда я скопировал только часть кодов в редакторе на верхний уровень.

1 Ответ

0 голосов
/ 18 января 2019

Использование стека не зависит от размера вашей программы или количества строк в ней, оно зависит от поведения вашей программы во время выполнения, в основном из-за циклической рекурсии. Например, эта небольшая функция будет использовать стек любого размера:

let rec f () = f () + f ()

На изображении, которое вы предоставили, я вижу по крайней мере один случай несвязанной рекурсии (то есть рекурсия, которая определенно не прекратится). Когда вы звоните insert, вы применяете его ко всему дереву m вместо поддерева. Таким образом, при каждом новом вызове ничего не меняется, и вы получаете бесконечный цикл.

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