Спрощена відповідь: коли ви бачите ім’я суто функціональною мовою, ви знаєте, що пов’язане значення шляхом простого пошуку його визначення. Якщо у вас є змінні змінні, ви можете лише визначити, яке з декількох призначень було виконано останнім, тому вам доведеться також проаналізувати потік управління, який, в свою чергу, може бути умовним, залишаючи вам кілька можливостей. Для отримання експоненціального вибуху потрібно лише врахувати, що РЗЗ призначень самі залежать від змінних, тому вам доведеться рекурсивно їх аналізувати.
Суть у наведеному вище аналізі полягає в тому, що він неможливий без коментарів, що пояснюють наміри, інваріанти та семантику: це може бути важко інтерпретувати, і може бути важко переконатися, що семантика дотримується у фактичному коді.
Ця відповідь в основному є розширенням точки @ Хав'єра 1.
Я думаю, що це також пояснення популярності шахрайського режиму ОО: з ОО змінено стан інкапсулюється, що робить аналіз набагато простішим, локалізуючи мутації до певної міри, і дозволяє набагато більш міцне вираження і перевірку семантики.
Зауваживши це, функціональне програмування - це не відповідь. Правильна відповідь - це система, яка підтримує як індуктивне (функціональне), так і коіндуктивне (процедурне) програмування, тому правильні інструменти можуть обробляти як бездержавне, так і державне програмування. Просто конструктивна (функціональна) теорія добре встановлена, тоді як теорія управління державою ще знаходиться в зародковому стані.