4

如果我有一个数字列表

(setq numbers '(10 11 12))

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

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

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

4

3 回答 3

5

正好有一个宏:

(incf (nth 2 numbers))

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

于 2013-07-04T10:53:48.627 回答
2

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

于 2013-07-22T14:01:27.737 回答
1

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))
于 2013-07-04T16:59:44.140 回答