【发布时间】:2012-01-20 06:26:25
【问题描述】:
我使用嵌套 plist 来创建对象结构(CLOS 类型),将嵌套的对象传递给它的各个部分。我想以迭代方式附加嵌套的 plist,但因此我想在时间和内存方面有效地完成它。
以下示例显示了由于一次迭代导致的增量:
'(:airframer "Boeing" :type "777" :wing-plist ((:side :left :winglet? nil)
(:side :right :winglet? nil)))
进入
'(:airframer "Boeing" :type "777" :wing-plist ((:type :main-wing :side :left)
(:type :main-wing :side :right)
(:type :stabilizer :size :left)))
我已经读到使用向量而不是列表可能会有所帮助,因为您访问元素不会受到太多惩罚:Replace an item in a list in Common Lisp?。但是,我真的很想绕过向量的使用。
此外,我认为使用破坏性函数可以节省内存并有望节省计算时间。
目前我是这样解决的,但是感觉不优雅,效率不高。函数fill用于破坏性。
(defun append-nested-plist (plist key sub-plist)
(let* ((key-pos (position key plist)))
(fill plist (append (getf plist key) (list sub-plist))
:start (+ key-pos 1) :end (+ key-pos 2))))
期待您的回答。
【问题讨论】:
标签: nested plist append common-lisp