乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 72|回复: 4

[LISP]请教各位subst

[复制链接]

43

主题

152

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
324
发表于 2004-7-30 17:13:00 | 显示全部楼层 |阅读模式
(setq dim_sc_new 1.5)
(setq dim_sc_old (cdr (assoc 1040 (cdadr (assoc -3 ent)))) )
我想用subst和entmod来实现dim_sc_new替换dim_sc_old,
请教各位大侠怎么做
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 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)
                                                         (setq dim_sc_new 1.5)
                                                         (setq dim_sc_old (cadr (assoc 1040 (cdadr (assoc -3 ent)))))
                                                         (setq dim_sc_b         (assoc 1040 (cdadr (assoc -3 ent))))
                                                         (setq dim_sc_new         (subst dim_sc_new dim_sc_old dim_sc_b))
                                                  (setq dim_sc_old dim_sc_b)
                                                         (setq dim_sc_b (cadr (assoc -3 ent)))
                                                         (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
                                                         (setq dim_sc_old dim_sc_b)
                                                         (setq dim_sc_b (assoc -3 ent))
                                                         (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
                                                         (setq dim_sc_old dim_sc_b)
                                                         (setq dim_sc_b ent)
                                                         (setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
                                                         (entmod dim_sc_new)
)
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)))
说明通过!
这只是测试函数的正确性,根据你的意思,ent应该是一个用(entget)函数取得
的实体数据表
回复

使用道具 举报

20

主题

872

帖子

10

银币

中流砥柱

Rank: 25

铜币
952
发表于 2004-7-31 13:18:00 | 显示全部楼层
(setq lst '((1 2) (-3 ((1 2) (1040 2.5) (1 2)) (1 2))))
(setq new 555)
(mapcar '(lambda (x / a b)
                         (setq a (car x)
                 b (cadr x))
                         (if (= a -3)
                                         (list -3 (subst (cons 1040 new) (assoc 1040 b) b))
                                         x
                         )
         )lst
)
->((1 2) (-3 ((1 2) (1040 . 555) (1 2))))
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2004-8-1 14:51:00 | 显示全部楼层
楼上的果然高!
回复

使用道具 举报

43

主题

152

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
324
发表于 2004-8-3 15:20:00 | 显示全部楼层
多谢两位!
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-23 12:58 , Processed in 0.477730 second(s), 62 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表