将不同的变量分配给
大家好!我已经搜索了一些关于这方面的信息,但没有什么非常接近我要找的。如果您有一个未知数量的元素列表,那么有人会如何为该列表中的每个元素分配不同的变量?比如说,你希望变量是p1,p2,p3。。。p(#列表的总元素)。有没有办法增加p并将其分配给列表中的下一个元素?
感谢您在advanced中的帮助!
起草人Joe 这是可行的,但有很多缺点:
(setq i 0)
(setq lst '("a" "b" "d" "e"))
(foreach v lst
(set (read (strcat "P" (itoa i))) v)
(setq i (1+ i)))
[列表]
[*]几乎不可能本地化这些变量
[*]检索数据也很困难:(eval(读取(strcat“P”(itoa i)))
[*]列表中不同的数据类型可能会造成严重破坏
[/列表]
首先
HTH-David 谢谢大卫!
我会试试你的代码。使用的数据类型是带有倒角的矩形多段线的坐标。
我会把发生的事情报告给你。
乔 我试过代码,只是有点不同,
(setq z 0)
(foreach v coords
(set (read (strcat "P" (itoa z)) v)
(setq z (1+ z)))
)
返回的内容如下:
; error: too many arguments
_$
我应该提到列表中的数据是第1个帖子中的点坐标。我猜想这一事实使这一点更加困难。
谢谢你的努力,大卫,我很感激!
乔 基于afralisp教程中的这一部分:
您可以这样做:
(defun test ( / args n vals a b c d e f )
(setq args '(a b c d e f))
(setq n 0)
(repeat (length args)
(setq vals (cons n vals))
(setq n (1+ n))
)
(mapcar 'set args (reverse vals))
(list a b c d e f)
)
_$ (test)
(0 1 2 3 4 5)
_$
编辑:
顺便考虑一下:
(defun test ( / coords i p1 p2 p3 p4 p5 p6 p7 p8 p9)
(setq coords '("First" "Second" "Third" "Fourth" "Fifth" "Sixth" "Seventh" "Eighth?" "Ninth?"))
(repeat (setq i (length coords))
(set (read (strcat "P" (itoa i))) (nth (setq i (1- i)) coords))
)
(foreach x (list p1 p2 p3 p4 p5 p6 p7 p8 p9)
(print x)
)
(princ)
)
_$ (test)
"First"
"Second"
"Third"
"Fourth"
"Fifth"
"Sixth"
"Seventh"
"Eighth?"
"Ninth?"
_$
但我同意D.Bethel的观点,即几乎不可能定位这些变量。 仔细查看以下内容:
(set (read (strcat "P" (itoa z))) v)
谢谢你看我的问题Grrr&Thwart!我感谢你的意见。
但是,由于我的列表由一个pline矩形的坐标组成,为了使用“read”函数,在我看来,我必须解构坐标列表,将每个元素的每个原子转化为字符串,然后用这些字符串重构元素,然后用新元素完成列表。从这里,我想另一个“foreach”函数将允许我处理坐标列表的解构和重建?我想我以前见过这么做。
或者,在构造原始列表之前,将每个元素转换为字符串?
我的想法正确吗?
再次感谢各位!
现在试试修改后的代码。它缺少1个括号(我应该测试最后一个片段) 试着这样做:
(defun SetvariableToEachCoordinate (s / e i l)
(if (and (eq (type s) 'ENAME)
(= (cdr (assoc 0 (setq e (entget s)))) "LWPOLYLINE")
(setq i 0)
)
(mapcar '(lambda (x) (set (read (strcat "P" (itoa (setq i (1+ i))))) x)
(setq l (cons (read (strcat "P" (itoa i))) l))
)
(mapcar 'cdr (vl-remove-if-not '(lambda (q) (= (car q) 10)) e))
)
)
(reverse l)
)
(SetvariableToEachCoordinate(car (entsel "\nSelect polyline :")))
我强烈建议以列表格式保留和操作数据——毕竟,LISP是为列表处理而设计的。
正如David在上文中所概述的,为每个项目元素使用单独的变量可能会导致几个问题。
页:
[1]
2