修改關聯列表的條目時遇到問題。當運行此代碼newLISP:修改關聯列表
實施例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")))
這就是我在例A中所做的......我想要做的就是檢查一個條目是否在'Dict'中,如果是 - 修改它。用'letn'我想避免重複的代碼 –