【发布时间】:2021-05-06 07:53:12
【问题描述】:
我需要使用 setq 更新嵌套在另一个关联列表中的关联列表中的值。我还不知道该怎么做,但我在找出如何做的第一步没有奏效。
在这里尽可能简单地说是我尝试过的:
(defvar l (list 1 2 3))
(loop for x in l do (setq x 5))
我希望这会将 l 中的所有元素更新为 5,但是当我检查 l 的值时,它根本不会改变。如果它不适用于此示例,那么显然它不适用于我的嵌套 alists 场景。我如何循环 l 并更改元素? 此外,如果 l 没有更新,那么 (setq x ...) 甚至在做什么?
编辑我决定使用常规的关联列表继续前进,但我仍然卡住了
(defvar u (list (list 1 2) (list 3 4)))
(assoc 1 u)
=> (1 2)
(let ((a (assoc 1 u))) (setf (assoc u 1) (cons (car a) 5)))
我希望你更改为 ((1 5) (3 4)) 但我收到错误函数 (SETF ASSOC) 未定义。如果 assoc 没有内置的 setf 形式,那么肯定还有其他内置函数可以做到这一点吗?
【问题讨论】:
标签: common-lisp