乐筑天下

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

[编程交流] LISP列表搜索

[复制链接]

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 22:40:21 | 显示全部楼层 |阅读模式
嗨,我需要帮助。我被我写的Lisp程序的部分卡住了。我一直坚持用LISP搜索列表,如果列表中没有该项,则将其添加,如果没有,则继续搜索选择集中的下一项。这个想法是,这个列表将用于构建一个数组。现在它在ASSOC命令的第二次传递中被卡住了。我们将不胜感激。
 
  1. (if                                ;check to see if pipe
  2.       (= check "AeccDbPipe")                ;if logic statement for pipe
  3. (progn                                ; starts comppiling
  4.   (setq psn (vlax-get-property item 'PartSizeName))
  5.   (setq        check3 (assoc 'psn   part_size_list  ) )
  6.   (if                                ;start if statement
  7.     (= check3 nil)                ; logic statement to see if item is in list
  8.      (setq part_size_list (append part_size_list (list psn)))
  9.   )                                ;end if
  10. )                                ;end progn
  11.     )                                        ;end if
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 22:46:12 | 显示全部楼层
看到part\u size\u list变量的格式会很有趣。基于此,您将决定由协会或会员检查其内容。
  1. (assoc "a" '(("a" 1) ("b" 2) ("c" 3)))
  1. (member "a" '("a" "b" "c"))

请编辑您的帖子并添加所需的代码标签。
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 22:50:58 | 显示全部楼层
 
它返回一个字符串,“300 mm PVC管”。因此,当它浏览图纸时,我只希望它添加新项目,并跳过重复项。然后,我的计划是获取列表长度并使用该长度创建数组。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 22:55:14 | 显示全部楼层
恐怕你没有回答我的问题;我想要的是part\u size\u list变量中存储的内容:
 
请不要引用上一条消息,这只会使帖子难以理解。另外,帮我一个忙,编辑你的第一篇帖子,添加代码标签。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 23:00:17 | 显示全部楼层
 
1+
 
了解更多信息会有所帮助。
 
 
 
 
如果您的逻辑是只确定当前值是否已经是存储值列表的元素,那么就不需要使用ASSOC或MEMBER,因为它们可以正常工作;他们只是在效率上有点劳动密集,因为他们实际上返回的结果不是T/Nil。也许可以考虑VL-POSITION,尤其是在迭代大型选择集时,因为您可能会看到性能的提高。
 
伪代码:
 
  1. (vl-load-com)
  2. (defun _SimpleRemoveDuplicates (dataList / myList)
  3. ;; Example:
  4. ;; (_SimpleRemoveDuplicates '("1" "2" "3" "1" "4" "5"))
  5. ;;
  6. ;; Returns:
  7. ;; ("1" "2" "3" "4" "5")
  8. (foreach x dataList
  9.    (if (not (vl-position x myList))
  10.      (setq myList (cons x myList))
  11.    )
  12. )
  13. (reverse myList)
  14. )
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:04:20 | 显示全部楼层
对不起,我希望这就是你想要的。。。
  1. Command: !part_size_list
  2. ("250 mm PVC Pipe")
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:08:12 | 显示全部楼层
因此,在这种情况下,您不能使用ASSOC;这是成员功能的作业:
  1. (member "250 mm PVC Pipe" ("250 mm PVC Pipe" "300 mm PVC Pipe" "350 mm PVC Pipe"))

 
感谢您解决上述问题。
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:13:41 | 显示全部楼层
太好了,这正是我需要的!非常感谢你。
 
现在开始处理数组结束的事情。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:17:45 | 显示全部楼层
不客气,JSYoung81!
 
关于数组,它在AutoLISP中的等效项是列表。你能举一个你想要构建的列表/数组结构的例子吗?
回复

使用道具 举报

3

主题

18

帖子

15

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-5 23:20:16 | 显示全部楼层
它需要做的是再次遍历选择集,并为每个管道尺寸添加管道长度。
 
IE:“150 mm PVC管”“150.000”
 
所以下一个“150mm PVC管”的长度是55.000m,加上150.000,那么总长度是205.000m
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 02:59 , Processed in 0.352696 second(s), 72 queries .

© 2020-2025 乐筑天下

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