Кажется, что при использовании define-key нельзя заключать в кавычки кавычки.
(define-key org-remember-mode-map "\C-c\C-r" 'org-remember-kill)
Я запутался, потому что я думаю, что все аргументы функции, которая не заключена в кавычки, оцениваются, и согласно справке define-key является функцией, а не макросом. Я не понимаю, почему значение KEYMAP можно изменить после вызова define-key.
(defun increment-value (a)
(setq a (+ 1 a)))
(setq my-num 10)
(increment-value my-num)
my-num ; ===> 10
Обновление: ответы объясняют все, но для тех, кто все еще смущен, позвольте мне прояснить больше примеров.
Мой пример значения приращения эквивалентен следующему:
(let ((n 0))
(print n) ; prints 0
(let ((a n))
(setq a (+ 1 a))
(print a) ; prints 1
)
(print n) ; prints 0
)
То, что происходит выше, я думаю, похоже на то, что происходит в этом примере с некоторыми картами:
(let ((some-map '(1 2)))
(print some-map) ; prints (1 2)
(let ((a some-map))
(setq a (list 4 (second a)))
(print a) ; prints (4 2)
)
(print some-map) ; prints (1 2)
)
То, что происходит в define-key, похоже на этот второй пример some-map:
(let ((some-map '(1 2)))
(print some-map) ; prints (1 2)
(let ((a some-map))
(setcar a 4)
(print a) ; prints (4 2)
)
(print some-map) ; prints (4 2)
)
Теперь прочитайте ответы снова с этими тремя примерами, и вы получите это. Читайте также http://www.emacswiki.org/emacs/ListModification