嗨我是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