lzy9788 发表于 2004-7-30 17:13:00

[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>请教各位大侠怎么做

mkhsj928 发表于 2004-7-31 03:35:00

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>

无痕 发表于 2004-7-31 13:18:00

(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>-&gt;((1 2) (-3 ((1 2) (1040 . 555) (1 2))))

mkhsj928 发表于 2004-8-1 14:51:00

楼上的果然高!

lzy9788 发表于 2004-8-3 15:20:00

多谢两位!
页: [1]
查看完整版本: [LISP]请教各位subst