JSYoung81 发表于 2022-7-5 22:40:21

LISP列表搜索

嗨,我需要帮助。我被我写的Lisp程序的部分卡住了。我一直坚持用LISP搜索列表,如果列表中没有该项,则将其添加,如果没有,则继续搜索选择集中的下一项。这个想法是,这个列表将用于构建一个数组。现在它在ASSOC命令的第二次传递中被卡住了。我们将不胜感激。
 
(if                                ;check to see if pipe
      (= check "AeccDbPipe")                ;if logic statement for pipe
(progn                                ; starts comppiling
(setq psn (vlax-get-property item 'PartSizeName))
(setq        check3 (assoc 'psn   part_size_list) )
(if                                ;start if statement
    (= check3 nil)                ; logic statement to see if item is in list

   (setq part_size_list (append part_size_list (list psn)))
)                                ;end if
)                                ;end progn
    )                                        ;end if

MSasu 发表于 2022-7-5 22:46:12

看到part\u size\u list变量的格式会很有趣。基于此,您将决定由协会或会员检查其内容。
(assoc "a" '(("a" 1) ("b" 2) ("c" 3)))
(member "a" '("a" "b" "c"))
请编辑您的帖子并添加所需的代码标签。

JSYoung81 发表于 2022-7-5 22:50:58

 
它返回一个字符串,“300 mm PVC管”。因此,当它浏览图纸时,我只希望它添加新项目,并跳过重复项。然后,我的计划是获取列表长度并使用该长度创建数组。

MSasu 发表于 2022-7-5 22:55:14

恐怕你没有回答我的问题;我想要的是part\u size\u list变量中存储的内容:
 
请不要引用上一条消息,这只会使帖子难以理解。另外,帮我一个忙,编辑你的第一篇帖子,添加代码标签。

BlackBox 发表于 2022-7-5 23:00:17

 
1+
 
了解更多信息会有所帮助。
 
 
 
 
如果您的逻辑是只确定当前值是否已经是存储值列表的元素,那么就不需要使用ASSOC或MEMBER,因为它们可以正常工作;他们只是在效率上有点劳动密集,因为他们实际上返回的结果不是T/Nil。也许可以考虑VL-POSITION,尤其是在迭代大型选择集时,因为您可能会看到性能的提高。
 
伪代码:
 

(vl-load-com)

(defun _SimpleRemoveDuplicates (dataList / myList)
;; Example:
;; (_SimpleRemoveDuplicates '("1" "2" "3" "1" "4" "5"))
;;
;; Returns:
;; ("1" "2" "3" "4" "5")
(foreach x dataList
   (if (not (vl-position x myList))
   (setq myList (cons x myList))
   )
)
(reverse myList)
)

JSYoung81 发表于 2022-7-5 23:04:20

对不起,我希望这就是你想要的。。。
Command: !part_size_list
("250 mm PVC Pipe")

MSasu 发表于 2022-7-5 23:08:12

因此,在这种情况下,您不能使用ASSOC;这是成员功能的作业:
(member "250 mm PVC Pipe" ("250 mm PVC Pipe" "300 mm PVC Pipe" "350 mm PVC Pipe"))
 
感谢您解决上述问题。

JSYoung81 发表于 2022-7-5 23:13:41

太好了,这正是我需要的!非常感谢你。
 
现在开始处理数组结束的事情。

MSasu 发表于 2022-7-5 23:17:45

不客气,JSYoung81!
 
关于数组,它在AutoLISP中的等效项是列表。你能举一个你想要构建的列表/数组结构的例子吗?

JSYoung81 发表于 2022-7-5 23:20:16

它需要做的是再次遍历选择集,并为每个管道尺寸添加管道长度。
 
IE:“150 mm PVC管”“150.000”
 
所以下一个“150mm PVC管”的长度是55.000m,加上150.000,那么总长度是205.000m
页: [1] 2
查看完整版本: LISP列表搜索