Yuvalanmış olanları parçalarına geçirerek, nesnelerin (CLOS türü) bir yapısını oluşturmak için iç içe bir plist kullanıyorum. Yuvalanmış plist'i tekrarlı bir şekilde eklemek istiyorum, ancak bu yüzden zaman ve bellek açısından verimli bir şekilde yapmak istiyorum. Zaten sen de olmadan unsurları erişirken yerine listelerinin vektörlerin kullanımı yardımcı olabileceğini okudumOrtak Lisp: İç içe bir plist verimli bir şekilde ekleme
'(: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)))
içine:
Aşağıdaki örnek bir yineleme nedeniyle delta gösterir fazla ceza: Replace an item in a list in Common Lisp?. Bununla birlikte, vektörlerin kullanımını geçmeyi gerçekten çok isterim. Ayrıca, bir yıkıcı işlev kullanmanın bellek tasarrufu sağlayacağını ve zamanı hesaplayacağını umuyorum.
Şu anda bunu şu anda çözdüm, ancak bunun zarif ve verimli olmadığını hissediyorum. fill
işlevi, yıkıcılık için kullanılır.
(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))))
Yanıtlarınızı dört gözle bekliyorum.