嗨我是AutoCad lisp的新手,我試圖用一些簡單的例程加速我的工作,但有一點點簡單,但我撞到一堵牆,無法弄清楚這一點,我有一個強大的填充,那裏是個簡單的解決方案。所以......Lisp更新列表
我做了一個名爲 「koord」 的文章:
(setq koord (list (cons "1" "10,10,10")))
結果是點對:("1" . "10,10,10")
之後,我添加到這個列表,例如:
(setq koord (append koord (list (cons "2" "20,20,20"))))
(setq koord (append koord (list (cons "3" "30,30,30"))))
現在的結果是:("1" . "10,10,10") ("2" . "20,20,20") ("3" . "30,30,30")
這時我想t O更新第二點對,讓我的列表看起來像這樣:
("1" . "10,10,10") ("2" . "60,60,60") ("3" . "30,30,30")
,但我不知道如何...如果我追加這樣
(setq koord (append koord (list (cons "2" "60,60,60"))))
比我得到這樣的結果:
("1" . "10,10,10") ("2" . "20,20,20") ("2" . "60,60,60") ("3" . "30,30,30")
這將不會太糟糕,如果我知道了如何獲取這一個("2" . "60,60,60")
如果我嘗試
(assoc "2" koord)
它給回的第一次出現,即("2" . "20,20,20")
那麼,有沒有辦法不增加,但更新點對一個值或檢索最後一個附加 - 不是第一個?
'(list(cons「1」「10,10,10」))''的結果不是'(「1」。「10,10,10」)''' ( (「1」。 「10,10,10」))' – Sylwester
而不是追加,簡單地說就像這樣:'(setq koord(cons(cons「2」「60,60,60」)koord))''。下一次你叫'(assoc「2」koord)',你會得到新的''(「2」。「60,60,60」)''。前一對仍然在'koord'列表中,但不會被'assoc'看到,它總是選擇第一個匹配。 –
你好。謝謝!我試過你的解決方案,它的工作原理 – Mario