For loop cl循环破坏性修改cons单元
我想更新For loop cl循环破坏性修改cons单元,for-loop,lisp,common-lisp,elisp,For Loop,Lisp,Common Lisp,Elisp,我想更新cl循环构造中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,但我认为这需要在不破坏结构的情况下使用循环。我怀疑我现在使用的方式是否可能
cl循环
构造中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
,但我认为这需要在不破坏结构的情况下使用循环。我怀疑我现在使用的方式是否可能没有指向该对象的指针,但我不确定。在循环中可以有多个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"))
循环中可以有多个
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"))