乐筑天下

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

[编程交流] 替换点对

[复制链接]

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 17:53:55 | 显示全部楼层 |阅读模式
大家好,
我想替换列表l中以3开头的所有虚线对,如下代码所示。但该代码仅替换第一次出现的代码。如何解决问题:
  1. (defun test()
  2. (setq l '((3 . 7) (2 . 5) (3 . 9)))  
  3. (setq l (subst '(3 . 6)  (assoc 3 l) l))   
  4. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:04:47 | 显示全部楼层
你好
 
您应该遍历列表并验证第一个元素是否等于3,然后进行替换,以便此时可以使用foreach函数。
先自己试试,让我们知道你做得怎么样。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:05:08 | 显示全部楼层
假设您希望用第一个出现的点对替换第一个(3.7)项,用“3”作为键,然后用第二个出现的点对替换第二个(3.9)项,用键为3?
 
如果是这样,我建议使用mapcar迭代主列表,并使用assoc对照替换列表检查每个列表项的键(第一个元素)。如果进行了替换,则需要从替换列表中删除该项。
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 18:13:12 | 显示全部楼层
LM,
谢谢你的建议。我尝试了以下方法,但没有成功。我怎样才能纠正它?。
  1. (defun test()
  2. (setq l '((3 . 7) (2 . 5) (3 . 9)))
  3. (setq n(length l))
  4. (setq a '(3 . 6))
  5. (repeat n
  6. (setq l (subst '(3 . 6)  (assoc 3 l) l))
  7. (setq l(vla-remove a l))
  8. )
  9. )
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 18:21:00 | 显示全部楼层
嗨,塔瓦,
我在“if”条件下尝试了你的方法。迭代似乎不采用“if”。
当做
芦荟
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:24:19 | 显示全部楼层
试试这个
 
  1. (defun test()
  2. (setq l '((3 . 7) (2 . 5) (3 . 9)))
  3. (setq a '(3 . 6))
  4. (repeat (setq n (length l))
  5. (setq b (nth (setq n (- n 1)) l))
  6.    (if (= (car b) 3)(setq l (subst a b l)))
  7. )
  8. )
  9. (test)
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 18:28:48 | 显示全部楼层
谢谢BIGAL,它很管用。我相信这将使我能够通过访问数据库中的项目来处理Autocad 2010无法使用Visual Lisp处理的“表”实体。然后,我可以从列表中输入数据。
再次感谢,
芦荟
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:36:05 | 显示全部楼层
 
在这里;
 
  1. (setq l '((3 . 7) (2 . 5) (3 . 9)))
  2. (foreach x l
  3. (if (= (car x) 3)
  4.    (setq l (subst '(3 . 6) x l))
  5.    )
  6. )
回复

使用道具 举报

53

主题

302

帖子

249

银币

后起之秀

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

铜币
265
发表于 2022-7-5 18:37:45 | 显示全部楼层
谢谢Tharwat,
它工作得很好。
当做
芦荟
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 18:46:31 | 显示全部楼层
真为你高兴。不客气。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 00:37 , Processed in 0.639078 second(s), 72 queries .

© 2020-2025 乐筑天下

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