如果我有一个数字列表
(setq numbers '(10 11 12))
我想增加第三个数字,我可以这样做:
(setf (nth 2 numbers) (1+ (nth 2 numbers)))
但我不喜欢重复“(第 n 2 个数字)”。有什么方法可以写这个但只有一个引用“(第n个2个数字)”?
正好有一个宏:
(incf (nth 2 numbers))
您可以提供要添加的值作为附加参数。
如果您想要一个更一般的答案(例如,对于某些其他功能而不是1+
),那么您可能想要查看cl-callf
. 另一种选择是使用gv-ref
,gv-deref
但这似乎不太适合您的情况(实际上它很少适合)。
Here's a pure emacs lisp way to do it without the double call to nth...
(defun inc-list(n lst)
(let ((nc (nthcdr n lst)))
(setcar nc (1+ (car nc)))
lst))