如果我有一个数字列表
(setq numbers '(10 11 12))
我希望增加第三个数字,我可以这样做:
(setf (nth 2 numbers) (1+ (nth 2 numbers)))
但我不想重复“(第2个数字)”。有什么方法可以写这个,但只有一个引用“(第2个数字)”?
答案 0 :(得分:5)
确切地说有一个宏:
(incf (nth 2 numbers))
您可以提供要添加的值作为附加参数。
答案 1 :(得分:2)
如果您想要更一般的答案(例如,除了1+
之外的某些其他功能),那么您可能希望查看cl-callf
。
另一个选择是使用gv-ref
和gv-deref
,但这似乎不适合您的情况(实际上它很少适合)。
答案 2 :(得分:1)
这是一个纯粹的emacs lisp方法,无需对nth进行双重调用......
(defun inc-list(n lst)
(let ((nc (nthcdr n lst)))
(setcar nc (1+ (car nc)))
lst))