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 看到part\u size\u list变量的格式会很有趣。基于此,您将决定由协会或会员检查其内容。
(assoc "a" '(("a" 1) ("b" 2) ("c" 3)))
(member "a" '("a" "b" "c"))
请编辑您的帖子并添加所需的代码标签。
它返回一个字符串,“300 mm PVC管”。因此,当它浏览图纸时,我只希望它添加新项目,并跳过重复项。然后,我的计划是获取列表长度并使用该长度创建数组。 恐怕你没有回答我的问题;我想要的是part\u size\u list变量中存储的内容:
请不要引用上一条消息,这只会使帖子难以理解。另外,帮我一个忙,编辑你的第一篇帖子,添加代码标签。
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)
)
对不起,我希望这就是你想要的。。。
Command: !part_size_list
("250 mm PVC Pipe") 因此,在这种情况下,您不能使用ASSOC;这是成员功能的作业:
(member "250 mm PVC Pipe" ("250 mm PVC Pipe" "300 mm PVC Pipe" "350 mm PVC Pipe"))
感谢您解决上述问题。 太好了,这正是我需要的!非常感谢你。
现在开始处理数组结束的事情。 不客气,JSYoung81!
关于数组,它在AutoLISP中的等效项是列表。你能举一个你想要构建的列表/数组结构的例子吗? 它需要做的是再次遍历选择集,并为每个管道尺寸添加管道长度。
IE:“150 mm PVC管”“150.000”
所以下一个“150mm PVC管”的长度是55.000m,加上150.000,那么总长度是205.000m
页:
[1]
2