如果要保持输出不变,即关联列表,则可以用许多不同的方式操作列表:
例如,要处理名为“block1”的块,例如:
(foreach x blkLst
(if (= "block1" (car x))
... Do something with result ...
) ; end if
) ; end foreach
或者,可能有多种情况:
或者可以提取不同的属性值:
另一种方法-没有那么优雅:
或者您只需要一个具有属性“Size”的块名列表:
或者仅属性本身:
(mapcar 'cdr blkLst)
希望这能进一步澄清问题。
如果你还有任何疑问,请告诉我
干杯
李 李,我还有一个简短的问题。我遇到了一个障碍,在这个Lisp程序,我不知道为什么它不工作。基本上,这就是我面临的问题。在做出决定后,我将变量设置为数值,例如(感谢您对这个例程的帮助):
(foreach y blkLst
(cond
((= "A" (cdr x))
(setq numThree 20))
((= "D" (cdr x))
(setq numThree 40))
((= "E" (cdr x))
(setq numThree 60))
((= "S" (cdr x))
(setq numThree 20))
)
)
基本上,基于用户选择,我有三个不同的数字变量,以确定所需的确切配置(数字值设置为每个最终总和只允许一个配置)。我遇到的问题是,当我试图将这三个变量相加时。当达到这一点时:
(setq numEq (+ numOne numTwo numThree))
我在命令行中得到错误:
"; error: bad argument type: numberp: nil"
当我在VisualLisp中为lisp设置动画时,它在试图添加三个变量时会向右中断。如果您能提供任何帮助,或提出任何更好的设置方法,我们将不胜感激。基本上,我有三个决定配置的输入:两个来自对话框中的用户选择,一个来自图形文件中的属性。基于这些输入的所有不同组合,我需要相应地设置配置。如果你想查看整个文件,请告诉我。
提前感谢,
丹
在上面的代码中,您似乎使用符号“y”分配给每个属性,然后在使用cond函数时继续使用不同的符号“x”。-这可能是没有设置变量的原因。
此外,您可以通过添加最终条件来测试上述理论:
(foreach x blkLst
(cond
((= "A" (cdr x))
(setq numThree 20))
((= "D" (cdr x))
(setq numThree 40))
((= "E" (cdr x))
(setq numThree 60))
((= "S" (cdr x))
(setq numThree 20))
(T (princ "\nNo Atrribute Found."))
)
)
这通常意味着您正在向函数提供一个设置为nil的参数。(见上文)
希望这有帮助!
李 不幸的是,我仍然有这个问题。我在最后添加了这个测试,但它没有打印出来,所以我猜它与其他两个数字有关。以下是每个的例程,具体取决于它们是否是对话框中的单选按钮。
(if (= Draw1 "1") (setq numTwo 1))
(if (= Draw2 "1") (setq numTwo 2))
(if (= Draw3 "1") (setq numTwo 3))
(if (= Draw4 "1") (setq numTwo 4))
(if (= Draw5 "1") (setq numTwo 5))
14
我想知道我是否需要在设置变量后转换为整数或其他东西,以确保它们是数值。 我会考虑将“cond”与您拥有的选项一起使用。-但无论如何,它应该与“if”一起工作。
如果你只是在加法,那么它们是否是整数应该没有多大区别——但是如果你以后要除法,那么实数是必要的,所以把它们转换成实数可能是最好的。
(条件
(=图纸1“1”)(setq numTwo 1.0)
((…等)
) 如果您仍然有问题,我建议您完整地发布代码,这样我就可以看到错误是否存在于其他地方。 这只是我正在做的一个示例,以便为其他操作进行修改。这是我尝试创建的一个快速绘图应用程序。如果您注意到末尾的plot命令,我必须明确说明比例、旋转和偏移,以便通过命令行正确绘制。因此,我们有3个独立的绘图仪和三种尺寸的绘图。我还附上了随附文件。dcl。
15
16
我对对话框本身不太了解,因为我自己从来没有使用过它们,但我只是好奇,上面突出显示的是正确的吗? 是的,没错。这就是决定在选择给定选项时取消激活(灰显)哪些选项。它是关于
17
页:
1
[2]