替换点对
大家好,我想替换列表l中以3开头的所有虚线对,如下代码所示。但该代码仅替换第一次出现的代码。如何解决问题:
(defun test()
(setq l '((3 . 7) (2 . 5) (3 . 9)))
(setq l (subst '(3 . 6)(assoc 3 l) l))
)
你好
您应该遍历列表并验证第一个元素是否等于3,然后进行替换,以便此时可以使用foreach函数。
先自己试试,让我们知道你做得怎么样。 假设您希望用第一个出现的点对替换第一个(3.7)项,用“3”作为键,然后用第二个出现的点对替换第二个(3.9)项,用键为3?
如果是这样,我建议使用mapcar迭代主列表,并使用assoc对照替换列表检查每个列表项的键(第一个元素)。如果进行了替换,则需要从替换列表中删除该项。 LM,
谢谢你的建议。我尝试了以下方法,但没有成功。我怎样才能纠正它?。
(defun test()
(setq l '((3 . 7) (2 . 5) (3 . 9)))
(setq n(length l))
(setq a '(3 . 6))
(repeat n
(setq l (subst '(3 . 6)(assoc 3 l) l))
(setq l(vla-remove a l))
)
) 嗨,塔瓦,
我在“if”条件下尝试了你的方法。迭代似乎不采用“if”。
当做
芦荟 试试这个
(defun test()
(setq l '((3 . 7) (2 . 5) (3 . 9)))
(setq a '(3 . 6))
(repeat (setq n (length l))
(setq b (nth (setq n (- n 1)) l))
(if (= (car b) 3)(setq l (subst a b l)))
)
)
(test)
谢谢BIGAL,它很管用。我相信这将使我能够通过访问数据库中的项目来处理Autocad 2010无法使用Visual Lisp处理的“表”实体。然后,我可以从列表中输入数据。
再次感谢,
芦荟
在这里;
(setq l '((3 . 7) (2 . 5) (3 . 9)))
(foreach x l
(if (= (car x) 3)
(setq l (subst '(3 . 6) x l))
)
)
谢谢Tharwat,
它工作得很好。
当做
芦荟 真为你高兴。不客气。
页:
[1]
2