Acad 2009:转移变量i
你好,我们的商店正在运行传统的Intellicad和Autocad,在不同的工作站上有不同的活动,因此有时我在编写lisp编程时必须小心交叉兼容性问题。
不过,这一特殊情况是我自己使用的,今年早些时候,我购买了一个座位。
以下是我的情况:
我有一个选择集来识别具有一定高度的文本:
(setq FE_01(ssget“_X”'((0。“Text”)(40.0.125)))
我一直试图做的是找出如何为选择集的文本高度部分设置一个变量值,但没有成功。
例如,如果我创建数字变量:(setq AAA 0.125)
我不能在选择集中替换该变量,即,
(setq FE_01(ssget“_X”'((0。“Text”)(40.AAA)))
如果我尝试,我会收到一条错误的选择集消息。
然后我尝试了SUBST,但没有成功:
(setq FE_01(ssget“_X”'((0。“Text”)(SUBST‘AAA’0.125’(40.0.125)Ή)Ή)
我原本希望SUBST函数将AAA变量转移到虚线对中,但没有成功。
(我知道我可能把SUBST的语法搞糟了)
我做了一个搜索,但似乎找不到解决这个特定问题的方法。
有一些关于AfraLisp的信息,我觉得我已经接近理解了,但我无法完全实现。
虽然我目前的编程技能很弱,但我不得不承认Lisp有一些非常吸引人的地方,我喜欢学习它。我希望它在其他应用中更常见
如果您对我目前的dilema有任何建议,我们将不胜感激。
非常感谢。
AJS公司 嘿AJS
问题在于用于选择集过滤器的引号
(setq FE_01(ssget“_X”'((0。“Text”)(40.0.125)))
要传递变量值,需要使用list
(setq FE_01(ssget“_X”(列表(cons 0“文本”)(cons 40 AAA)))
有关它的更多信息,请参阅以下线程
http://www.cadtutor.net/forum/showthread.php?t=36514
当做
杰米 当您为SSGET表达式创建过滤器列表时,有许多方法可以构造列表,理解其中的差异至关重要。
首先请注意,列表可以通过以下方式创建:
(list 1 2 3)
或
两者代表同一事物。然而,口译员将以两种不同的方式解释这两种表达。
对于第一个参数,list函数告诉解释器评估传递给它的每个参数,并返回一个包含所有传递参数的列表。
然而,在第二种排列中,引号(或撇号)将告诉口译员不要计算撇号后面语句中的任何表达式。
这就是为什么在mapcar中使用撇号:
返回:
在这种情况下,撇号告诉解释器,不计算函数+,而是作为参数传递给mapcar函数。
那么,回到你手头的问题上来。
创建包含“已知”元素的过滤器列表时,例如:
不计算提供的列表,而只是将其作为参数传递给ssget函数(由于撇号)。因此,不会评估列表中的任何变量。
因此,为了计算变量,我们需要为解释器提供函数,告诉它计算出参数:
现在,如果我们的变量持有正确格式的值(在本例中为实数),则将正确构造和评估过滤器列表。
或者,您可以组合这些选项:
6作为“(0。“TEXT”)部分仅被视为列表参数,并传递给列表函数。
但是,这将不起作用:
由于撇号的存在,将不评估cons函数。
如果你对我发布的任何信息有任何疑问,尽管问。
干杯
李 Jammie抢先一步 如果你真的想使用subst,那么类似的东西就行了
8
但在这种情况下,使用列表将是首选选项
不过你的解释要彻底得多,干得好 非常感谢你;我认为这是我目前所读的知识水平中信息量最大的帖子之一。当谈到“报价”的运作方式时,我总是感到困惑。这很有帮助。
当我和你们在一起的时候,有一件事我一直没能完全理解,那就是感叹号在显示变量值时是如何起作用的。
作为测试,如果我在屏幕上,在命令行输入,感叹号总是很有效,但当我在Lisp中的命令中使用它时,它被击中或错过了,我无法确定它为什么工作或不工作的原理的模式。感叹号是Lisp中具有一组规则的组成部分,还是为测试目的而创建的混合体?
再次感谢
AJS公司 我不会在LISP中使用感叹号,而是使用print,它应该完成相同的任务 再次感谢
页:
[1]