Вот короткий код elisp, который показывает, что поведение функции зависит от имени ее переменной. Это ошибка?Если поведение функции зависит от имени ее переменной?
Функция объявляется с использованием переменной x. Когда эта функция вызывается с переменной с именем, отличной от x, она работает так, как ожидалось. Но если он вызывается с переменной с именем x, он терпит неудачу!
Моя система GNU Emacs 22.2.1 (PowerPC-яблочно-darwin8.11.0, углеродистая версия 1.6.0) от 2008-04-05 на g5.tokyo.stp.isas.jaxa.jp
Вставьте это в буфер emacs, поместите курсор после последнего parehthesis и нажмите \ Cx \ Ce, чтобы увидеть, что функция make-zero теперь работает правильно, когда вызывается второй раз.
(progn
(defun make-zero (x)
"Simple function to make a variable zero."
(set x 0))
(setq x 10)
(insert "\n Variable x is now equal to " (number-to-string x))
(setq y 20)
(insert "\n Variable y is now equal to " (number-to-string y))
(insert "\n\n Let us apply make-zero to y")
(make-zero 'y)
(insert "\n Variable y is now equal to " (number-to-string y))
(insert "\n\n Let us apply make-zero to x")
(make-zero 'x)
(insert "\n Variable x is now equal to " (number-to-string x))
(insert "\n\n Why make-zero had no effect on x? Is it because the name of the
variable in the definition of make-zero, namely 'x', is the same as the name of
the variable when make-zero was called? If you change the name of the variable
in the definition of make-zero from x to z, this strange behaviour will
disappear. This seems to be a bug in elisp."))
Не нужно требовать cl.el для второго примера. Он должен работать так же хорошо без него. – Drew