(defun make-it-5 (num)
(setq num 5))
(setq a 0)
(make-it-5 a)
;; now a is still 0, not 5.
В приведенном выше коде кажется, что нет (setq a 5) и (setq 0 5). Если (setq a 5) произошло, то a изменилось бы на 5, но a все равно 0. Если (setq 0 5) произошло, произошла ошибка Lisp. Что происходит? Это мой вопрос.Что происходит, когда я устанавливаю переменную параметра в defun? (Emacs)
Для некоторых из вас, кто попал сюда прибегая к помощи и интересно, как сделать макияж-It-5 работы как его имя предположить, один путь
(defmacro make-it-7 (num) ; defmacro instead of defun
`(setq ,num 7))
(setq a 0)
(make-it-7 a)
;; now a is 7.
Другой:
(defun make-it-plus (num-var)
(set num-var (+ 1 (symbol-value num-var))) ; `set' instead of `setq'
)
(setq a 0)
(make-it-plus 'a) ; 'a instead of a
;; now a is 1.
Вопрос немного запутанный. Две альтернативы, которые вы предоставляете, требуют более подробного понимания lisp (emacs-lisp). Я предполагаю, что вы не понимаете, как они работают ... –