gpt4 book ai didi

Lisp - 如何打破列表的 'pair'?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:22 26 4
gpt4 key购买 nike

运行一段代码后,我得到以下输出(一对单独的两个列表):

("a") ("a")

如何将这对列表合并为一个?即我想要以下输出:

("a""a")

为澄清起见,我的代码是:

(defun c:TEST ()
(setq a (ssget)); I select a line here
(setq b (assoc 8 (entget (ssname a 0)))); gets me all dotted pairs containing 8
(setq c (list (cdr b))); gets second elements of each pair (strings in this case) and converts them to two separate lists
(print c)
)

最佳答案

我已经解决了你的问题,据我所知,我正在尝试解决你的问题,你似乎试图获取那条线的图层名称。

如果你运行测试函数作为提到的问题它返回 ("a") ("a") 两次,因为第一个是由于代码中的 (print c) 和第二个作为函数输出值。输出是单个列表 ("a") 但它在命令提示符下写了两次。

我以为你在这里误解了。如果您在函数末尾键入 (princ),则输出为 ("a")

请记住 AutoLISP 始终返回函数的最后一个语句作为函数值,以获取更多通过开发人员文档。

此外,您还可以在 AutoLISP 中找到打印值开发人员使用“print”、“princ”、“prin1”和“prompt”命令的详细信息 click here

下面我写了一些函数可以帮助你更好地理解这个概念

;
(defun c:TEST()
(setq a (ssget))
(setq b (assoc 8 (entget (ssname a 0))))
(setq c (list (cdr b)))
(print c)
;output-> ("a") ("a")
)

(defun c:TEST1 ()
(setq a (ssget))
(setq b (assoc 8 (entget (ssname a 0))))
(setq c (list (cdr b)))
(print c)

(princ);return nothing

;output-> ("a")
)


(defun c:TEST2()
(setq a (ssget))
(setq b (assoc 8 (entget (ssname a 0))))
(setq c (list (cdr b)))
(print c)

(princ "last statement");return nothing
;output-> ("a") last statement"last statement"
)

(defun c:TEST3()
(setq a (ssget))
(setq b (assoc 8 (entget (ssname a 0))))
(setq c (list (cdr b)))
(print c)

(princ "last statement");return nothing
(princ)
;output-> ("a") last statement
)

如果你运行测试输出是("a") ("a")

如果你运行 test1 输出是 ("a")

如果你运行 test2 输出是 ("a") last statement"last statement"

在这里你看到“最后一条语句”是两次因为同样的原因 AutoLISP 总是返回函数的最后一条语句作为函数值

如果你运行 test3 输出是 ("a") last statement

希望对你有帮助

关于Lisp - 如何打破列表的 'pair'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50958354/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com