Упрощенный ответ таков: когда вы видите имя на чисто функциональном языке, вы узнаете, что такое ассоциированное значение, путем простого поиска его определения. Если у вас есть изменяемые переменные, вы можете только определить, по какому из нескольких назначений он был выполнен последним, поэтому вам также нужно проанализировать поток управления, который, в свою очередь, может быть условным, предоставляя вам множество возможностей. Чтобы получить экспоненциальный взрыв, вам нужно только учитывать, что RHS заданий сами по себе зависят от переменных, поэтому вам придется рекурсивно их анализировать.
Суть в приведенном выше анализе заключается в том, что он бесполезен без комментариев, объясняющих намерение, инварианты и семантику: это может быть трудно интерпретировать, и может быть трудно проверить, соблюдается ли семантика в реальном коде.
Этот ответ в основном является расширением точки 1 Хавьера.
Я думаю, что это также объясняет популярность мошеннического режима OO: в OO изменяемое состояние инкапсулируется, что значительно облегчает анализ за счет локализации мутаций в некоторой степени и позволяет гораздо более надежное выражение и проверку семантики.
Отметив это, функциональное программирование не является ответом. Правильный ответ - это система, которая поддерживает как индуктивное (функциональное), так и коиндуктивное (процедурное) программирование, поэтому правильные инструменты могут обрабатывать как программирование без сохранения состояния, так и программирование с сохранением состояния. Просто конструктивная (функциональная) теория хорошо известна, тогда как теория государственного управления все еще находится в зачаточном состоянии.