Я написал программируемый пользователем калькулятор, и теперь столкнулся со следующей проблемой.
Допустим, пользователь пишет в нем следующее:
fun(n) = fun(n-1)
а затем пытается позвонить fun(42) (или любой другой номер). Теперь очевидно, что пользовательский код вызовет бесконечную рекурсию, что, в свою очередь, приведет к сбою всего калькулятора с переполнением стека.
Как я могу заставить калькулятор выйти из расчета изящно?
Я посмотрел, как Mathematica справляется с подобными ситуациями, и он просто выручает, говоря:
$IterationLimit::itlim: Iteration limit of 4096 exceeded.
Я пробовал аналогичный подход, но тогда, поскольку размер стека зависит от ОС, как мне узнать, какое число использовать в качестве предела итерации (да, я нашел число, которое «кажется, работает» экспериментальным путем, но это не так). не чувствую себя хорошо)?
Спасибо за ваше время. Ядро калькулятора написано на C.