[LISP]请教各位subst
(setq dim_sc_new 1.5)<BR>(setq dim_sc_old (cdr (assoc 1040 (cdadr (assoc -3 ent)))) )<BR>我想用subst和entmod来实现dim_sc_new替换dim_sc_old,<BR>请教各位大侠怎么做 ent表也太深了吧!首先你第二句中的cdr应改成cadr,因为cdr取得的是一个表,而根据你的意思dim_sc_old与dim_sc_new对应,所以dim_sc_old也应是一个数值而不是表
具体实现参看下面函数,也许方法显得笨了点,但能通过,企盼高人指点!
(defun mode_ent( ent / dim_sc_old dim_sc_new dim_sc_b)<BR> (setq dim_sc_new 1.5)<BR> (setq dim_sc_old (cadr (assoc 1040 (cdadr (assoc -3 ent)))))<BR> (setq dim_sc_b (assoc 1040 (cdadr (assoc -3 ent))))<BR> (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))<BR> (setq dim_sc_old dim_sc_b)<BR> (setq dim_sc_b (cadr (assoc -3 ent)))<BR> (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))<BR> (setq dim_sc_old dim_sc_b)<BR> (setq dim_sc_b (assoc -3 ent))<BR> (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))<BR> (setq dim_sc_old dim_sc_b)<BR> (setq dim_sc_b ent)<BR> (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))<BR> (entmod dim_sc_new)<BR>)
ent输入: ((1 2) (-3 ((1 2) (1040 2.5) (1 2)) (1 2)))
函数返回:((1 2) (-3 ((1 2) (1040 1.5) (1 2)) (1 2)))<BR>说明通过!
这只是测试函数的正确性,根据你的意思,ent应该是一个用(entget)函数取得
的实体数据表<BR> (setq lst '((1 2) (-3 ((1 2) (1040 2.5) (1 2)) (1 2))))<BR>(setq new 555)<BR>(mapcar '(lambda (x / a b)<BR> (setq a (car x)<BR> b (cadr x))<BR> (if (= a -3)<BR> (list -3 (subst (cons 1040 new) (assoc 1040 b) b))<BR> x<BR> )<BR> )lst<BR>)<BR>->((1 2) (-3 ((1 2) (1040 . 555) (1 2)))) 楼上的果然高! 多谢两位!
页:
[1]