Всем привет!
КТо-нибудь встречался с попытками прикрутить ту или иную форму декларации const к Common lisp? Я думаю, что для этого нужно лезть в потроха самого компилятора. Меня интересуют в этой связи SBCL и CCL.
В простейшем случае декларация const должна распространяться на биндинг переменной и говорить о том, что в области действия биндинга не делается setq.
Более сложный вариант - заявление о неприкосновенности полей объекта. Например, пусть мы получили параметр cons. Тогда декларируем что-то типа (declare (const (car param))) и это значит, что мы не трогаем car param и полагаем, что у нас под рукой другие его тоже не трогают. Правда, тут есть нюансы смысла (мы не трогаем, другие не трогают, никто не трогает), но не суть. Мне бы хоть что-нибудь.
А то вишь - отец всех функциональных языков без иммутабельности...