4

数字のリストがある場合

(setq numbers '(10 11 12))

そして、たとえば 3 番目の数字をインクリメントしたい場合、次のように実行できます。

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

しかし、「(n番目の2つの数字)」を繰り返さなければならないのは好きではありません。これを書く方法はありますが、「(nth 2 numbers)」への参照は 1 つしかありませんか?

4

3 に答える 3

5

まさにそのためのマクロがあります:

(incf (nth 2 numbers))

追加の引数として追加する値を指定できます。

于 2013-07-04T10:53:48.627 に答える
1

これは、nthへの二重呼び出しなしでそれを行う純粋なemacs Lispの方法です...

(defun inc-list(n lst)
  (let ((nc (nthcdr n lst)))
    (setcar nc (1+ (car nc)))
    lst))
于 2013-07-04T16:59:44.140 に答える