Возник вопрос про локальные объявления функций.
Есть следующий скрипт и его вывод:
(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"