影响列表的一个元素

时间:2013-07-04 10:40:55

标签: emacs elisp

如果我有一个数字列表

(setq numbers '(10 11 12))

我希望增加第三个数字,我可以这样做:

(setf (nth 2 numbers) (1+ (nth 2 numbers)))

但我不想重复“(第2个数字)”。有什么方法可以写这个,但只有一个引用“(第2个数字)”?

3 个答案:

答案 0 :(得分:5)

确切地说有一个宏:

(incf (nth 2 numbers))

您可以提供要添加的值作为附加参数。

答案 1 :(得分:2)

如果您想要更一般的答案(例如,除了1+之外的某些其他功能),那么您可能希望查看cl-callf。 另一个选择是使用gv-refgv-deref,但这似乎不适合您的情况(实际上它很少适合)。

答案 2 :(得分:1)

这是一个纯粹的emacs lisp方法,无需对nth进行双重调用......

(defun inc-list(n lst)
  (let ((nc (nthcdr n lst)))
    (setcar nc (1+ (car nc)))
    lst))