我在修改关联列表的条目时遇到问题。当我运行这段代码
示例 A
(set 'Dict '(("foo" "bar")))
(letn (key "foo"
entry (assoc key Dict))
(setf (assoc key Dict) (list key "new value")))
(println Dict)
结果是:
(("foo" "new value")) ; OK
这是预期的。使用此代码
示例 B
(set 'Dict '(("foo" "bar")))
(letn (key "foo"
entry (assoc key Dict))
(setf entry (list key "new value"))) ; the only change is here
(println Dict)
结果是:
(("foo" "bar")) ; huh?
为什么Dict
在第二种情况下没有更新?
编辑
我想要的是检查一个条目是否在其中Dict
,如果是 - 更新它,否则不要管它。我letn
想避免重复的代码
(letn (key "foo"
entry (assoc key Dict))
(if entry ; update only if the entry is there
(setf entry (list key "new value")))