Archiman86 发表于 2022-7-6 12:13:02

李,我如何编辑你写的Lisp,这样我就可以把aVal作为变量调用。例如,我想决定“如果属性值='D',那么…”我试着只添加一个“if”函数,然后在此基础上设置一个变量,但在我的完整Lisp中似乎不起作用。我知道最后它会获取属性值并将其添加到列表中,然后与块名相结合。然后进入下一个属性/块。我该怎么做呢,搜索列表中的特定值,或者特别是“Border.D”等,以便可以相应地配置以下命令。

Lee Mac 发表于 2022-7-6 12:16:24

嗨,Archiman,
 
如果要保持输出不变,即关联列表,则可以用许多不同的方式操作列表:
 
例如,要处理名为“block1”的块,例如:
 

(foreach x blkLst
(if (= "block1" (car x))
    ... Do something with result ...
   ) ; end if
) ; end foreach

或者,可能有多种情况:
 
或者可以提取不同的属性值:
 
另一种方法-没有那么优雅:
 
或者您只需要一个具有属性“Size”的块名列表:
 
或者仅属性本身:
 

(mapcar 'cdr blkLst)

希望这能进一步澄清问题。
 
如果你还有任何疑问,请告诉我
 
干杯
 

Archiman86 发表于 2022-7-6 12:21:13

李,我还有一个简短的问题。我遇到了一个障碍,在这个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设置动画时,它在试图添加三个变量时会向右中断。如果您能提供任何帮助,或提出任何更好的设置方法,我们将不胜感激。基本上,我有三个决定配置的输入:两个来自对话框中的用户选择,一个来自图形文件中的属性。基于这些输入的所有不同组合,我需要相应地设置配置。如果你想查看整个文件,请告诉我。
 
提前感谢,
 

Lee Mac 发表于 2022-7-6 12:22:16

 
在上面的代码中,您似乎使用符号“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的参数。(见上文)
 
希望这有帮助!
 

Archiman86 发表于 2022-7-6 12:27:11

不幸的是,我仍然有这个问题。我在最后添加了这个测试,但它没有打印出来,所以我猜它与其他两个数字有关。以下是每个的例程,具体取决于它们是否是对话框中的单选按钮。
 

(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
 
我想知道我是否需要在设置变量后转换为整数或其他东西,以确保它们是数值。

Lee Mac 发表于 2022-7-6 12:31:23

我会考虑将“cond”与您拥有的选项一起使用。-但无论如何,它应该与“if”一起工作。
 
如果你只是在加法,那么它们是否是整数应该没有多大区别——但是如果你以后要除法,那么实数是必要的,所以把它们转换成实数可能是最好的。
 
(条件
(=图纸1“1”)(setq numTwo 1.0)
((…等)
)

Lee Mac 发表于 2022-7-6 12:34:27

如果您仍然有问题,我建议您完整地发布代码,这样我就可以看到错误是否存在于其他地方。

Archiman86 发表于 2022-7-6 12:36:11

这只是我正在做的一个示例,以便为其他操作进行修改。这是我尝试创建的一个快速绘图应用程序。如果您注意到末尾的plot命令,我必须明确说明比例、旋转和偏移,以便通过命令行正确绘制。因此,我们有3个独立的绘图仪和三种尺寸的绘图。我还附上了随附文件。dcl。
 
15
 
 
16

Lee Mac 发表于 2022-7-6 12:38:31

 
 
我对对话框本身不太了解,因为我自己从来没有使用过它们,但我只是好奇,上面突出显示的是正确的吗?

Archiman86 发表于 2022-7-6 12:42:27

是的,没错。这就是决定在选择给定选项时取消激活(灰显)哪些选项。它是关于
 
17
页: 1 [2]
查看完整版本: 需要帮助提取属性