Archiman86 发表于 2022-7-6 10:09:58

局部函数问题

我正在尝试转换一段时间前编写的例程,以便创建它的命令行版本。现在它都是一个函数,我正试图将其划分为几个局部函数,以便根据执行的命令选择要使用的部分。我已经设置了一些本地功能,可以正常工作。我正在一节一节地做,并进行测试。当我加载对话框时,它总是出错。
 
这是调用select local函数的函数命令:

(defun C:pltt (/)
(space)
(bdrExt)
(rundcl)
(vrebles)
(dwgplot)
)

 
这是我为加载和运行DCL对话框而设置的函数:

(defun rundcl (numThree / dlg-id dev1 dev2 dev3 dev4 dev5 device# pOne pTwo pThree pFour pFive Plot#)
(setq dlg-id (load_dialog "Q:\\std\\acad\\support\\lisp\\plt.dcl"))
(new_dialog "plt" dlg-id)

(if
   (= numThree 20)
   (progn
    (action_tile "dev1" "(setq device# 1)")
    (mode_tile "dev2" 1)
    (mode_tile "dev3" 1)
    (mode_tile "dev4" 1)
    (action_tile "dev5" "(setq device# 5)")
    (action_tile "pOne" "(setq Plot# 1)")
    (mode_tile "pTwo" 1)
    (mode_tile "pThree" 1)
    (mode_tile "pFour" 1)
    (mode_tile "pFive" 1)
   )
)

(if
   (= numThree 40)
   (progn
    (mode_tile "dev1" 1)
    (action_tile "dev2" "(setq device# 2)")
    (action_tile "dev3" "(setq device# 3)")
    (action_tile "dev4" "(setq device# 4)")
    (action_tile "dev5" "(setq device# 5)")
    (mode_tile "pOne" 1)
    (action_tile "pTwo" "(setq Plot# 2)")
    (action_tile "pThree" "(setq Plot# 3)")
    (action_tile "pFour" "(setq Plot# 4)")
    (mode_tile "pFive" 1)
   )
)

(if
   (= numThree 60)
   (progn
    (mode_tile "dev1" 1)
    (action_tile "dev2" "(setq device# 2)")
    (action_tile "dev3" "(setq device# 3)")
    (action_tile "dev4" "(setq device# 4)")
    (action_tile "dev5" "(setq device# 5)")
    (mode_tile "pOne" 1)
    (action_tile "pTwo" "(setq Plot# 2)")
    (action_tile "pThree" "(setq Plot# 3)")
    (action_tile "pFour" "(setq Plot# 4)")
    (action_tile "pFive" "(setq Plot# 5)")
   )
)
    (action_tile "plot" "(done_dialog 1)")
    (action_tile "cancel" "(done_dialog 0)")

    (start_dialog)
    (unload_dialog dlg-id)
)

 
“space”、“dwgplot”、“BdrExt”和“vrebles”的函数工作正常。我不明白为什么这个总是出错:
 

; error: too few arguments

 
任何帮助都将不胜感激。我是一个新的使用本地功能,所以在这方面的任何帮助将不胜感激。
 
谢谢

Archiman86 发表于 2022-7-6 10:17:56

非挥发性物质。我解决了这个问题。变量“numThree”被称为局部变量,而不是全局变量。现在可以工作了。

Lee Mac 发表于 2022-7-6 10:28:06

仅供参考,在“rundcl”程序中使用COND函数

Archiman86 发表于 2022-7-6 10:36:37

我有点头晕。对话框功能现在工作了,是的,我将把它改为“Cond”。但是,此功能不起作用。我想设置几个用于输出配置的变量:
 
;---------------------------------------------------
;------ Set Variables for Output configuration -----
;---------------------------------------------------
(defun vrebles (device1 device2 device3 device4 device5 device# Plot1 Plot2 Plot3 Plot4 Plot5 Plot# numThree / numOne numTwo)
; Set the output device variable and numOne based on selection:

(cond
   ((= device# 1) (setq numOne 1))
   ((= device# 2) (setq numOne 10))
   ((= device# 3) (setq numOne 100))
   ((= device# 4) (setq numOne 1000))
   ((= device# 5) (setq numOne 10000))
)
; Set the plot size variable and numTwo based on selection:
(cond
   ((= Plot# 1) (setq numTwo 1))
   ((= Plot# 2) (setq numTwo 2))
   ((= Plot# 3) (setq numTwo 3))
   ((= Plot# 4) (setq numTwo 4))
   ((= Plot# 5) (setq numTwo 5))
))
 
再次感谢李的快速回复。任何额外的帮助都将不胜感激。

Lee Mac 发表于 2022-7-6 10:41:17

这里有很多参数,其中只有两个在函数中使用。。。

alanjt 发表于 2022-7-6 10:46:00

哇!
........

Archiman86 发表于 2022-7-6 10:52:39

好的,我删除了不必要的参数,但仍然出现错误“参数太少”

alanjt 发表于 2022-7-6 10:56:52

您在子例程中分配变量,但要将其本地化。重点是什么?

Archiman86 发表于 2022-7-6 11:04:51

嗯,就像我说的,我不熟悉子程序。这就是我出错的原因吗?

Lee Mac 发表于 2022-7-6 11:15:40

听起来你调用它的参数数量不正确。
页: [1]
查看完整版本: 局部函数问题