Правильно ли я понимаю, что наличие мутабельных переменных (set! и компания) позволяет отнести Scheme/Lisp к императивным языкам? Из-за мутабельности вызовы функций могут иметь сайд-эффекты, становится важен порядок вызовов, ну и далее вырастает весь комплекс проблем классических императивных процедурных языков. Если это рассуждение не правильно, то объясните пожалуйста в развернутой форме, что именно не так?