вопрос о связывании переменных в общем lisp

Это вопрос о привязке переменных в функции define:

Если я определяю функцию «total» вот так, x в «total» привязывается к локальному x в let.

CL-USER> (let ((x 0))
           (defun total (y)
             (incf x y)))
TOTAL
CL-USER> (defvar x 10000)
X
CL-USER> (total 1)
1

, но, если я определяю «total» вот так, x привязывается к глобальному x в defvar:

CL-USER> (defvar x 10000) 
X
CL-USER> (let ((x 0))
           (defun total (y)
             (incf x y)))
TOTAL
CL-USER> (total 1)
10001

Почему? Мне нужно объяснение, чтобы понять это. { {1}} среда: windows + emacs + slime + sbcl.Спасибо.

7
задан luosha865 22 April 2011 в 06:40
поделиться