Возник вопрос про локальные объявления функций. Есть следующий скрипт и его вывод: (defun f1 (f com) (format t "~&fi. com: ~S" com) (defun f2 (n) (if (= n 0) (format t "~&if. com: ~S" com) (f2 (- n 1))) 1) (f2 (funcall f))) (defun f2 (n) (defun f () (f1 #'(lambda () n) "x")) (f1 #'f "y")) (f3 1) # clisp ./a.lisp fi. com: "y" fi. com: "x" if. com: "x" if. com: "x" Однако вывод при его выполнении с небольшими изменениями: (defun f1 (f com) (format t "~&fi. com: ~S" com) (defun f2 (n) (format t "~&if. com: ~S" com)) 1) (f2 (funcall f))) (defun f2 (n) (defun f () (f1 #'(lambda () n) "x")) (f1 #'f "y")) (f3 1) # clisp ./a.lisp fi. com: "y" fi. com: "x" if. com: "x" if. com: "y"