У финнов есть такой пример кода:
[code] _(setq y 10) 10 _(setq s (function (lambda (x) (+ x y)))) (LEXICAL_CLOSURE ...) _(funcall s 2) 12 _(setq y 100) 100 _(funcall s 2) 12 [/code]
Видно, что как и положено, значение свободной переменной Y сохраняется в замыкании.
Но это - в книжке. В clisp происходит так:
[code] [15]>(setq y 10) 10 [16]> (setq s (function (lambda (x) (+ x y)))) #<FUNCTION :LAMBDA (X) (+ X Y)> [17]> (funcall s 2) 12 [18]> (funcall s 2) 12 [19]> (setq y 100) 100 [20]> (funcall s 2) 102 [/code]
То есть "не работает".
Думаю, что я упустил какую-то важную деталь, связанную с работой самого clisp