我想更新cl-loop
构造中的cons单元格的内容。例如,假设我有以下
(setq lst '(("a" . "b") ("c" . "d")))
(cl-loop for (k . v) in lst
when (string= k "b")
do (setq v "f") ; how to destructively change this?
and return t)
我原以为我需要使用setcdr
,但想到这需要使用循环而不进行解构。我怀疑现在的方式是否可能没有得到指向该对象的指针,但我不确定。
答案 0 :(得分:2)
循环中可以有多个for
- 子句:
(let ((alist (copy-tree '(("a" . "b") ("b" . "c") ("c" . "d") ("b" . "e")))))
(cl-loop for cell in alist
for (k . v) = cell
when (string= k "b")
do (setcdr cell "f")
and return t)
alist)
;=> (("a" . "b") ("b" . "f") ("c" . "d") ("b" . "e"))