CAD Lisp 如何定义全局变量和局部变量 以确保主程序和子程序间变量可以传递并且程序运行完之后释放内存 50
希望有详细的说明!!!而不是只言片语的解答。本人刚学习Autolisp和VisualLisp不久,虽然会写一点小程序,但是一直没有搞懂(defunc:XX())中XX后面...
希望有详细的说明!!!而不是只言片语的解答。
本人刚学习Autolisp和VisualLisp不久,虽然会写一点小程序,但是一直没有搞懂(defun c:XX( ))中XX后面的括号里的内容该如何填写,虽然知道里面是填全局变量和局部变量,但是一直没有真正搞清楚它的原理和用法,本人写了一个简易的计算器程序,功能如下图。程序测试过可以使用,但是可能是由于没有定义变量是全局变量还是局部变量的原因,在运行时会偶尔出现一些奇怪的错误。希望有人能给我解答,教我在我这个程序里如何填写局部变量和全局变量。
(defun c:tt( )
(setq a(getreal))
(setq b x)
(fun1) (fun2)
)
(defun fun1( )
(setq c (+ a b))
(setq d y)
)
(defun fun2( )
(setq e z)
(setq f (+ a c e))
) 展开
本人刚学习Autolisp和VisualLisp不久,虽然会写一点小程序,但是一直没有搞懂(defun c:XX( ))中XX后面的括号里的内容该如何填写,虽然知道里面是填全局变量和局部变量,但是一直没有真正搞清楚它的原理和用法,本人写了一个简易的计算器程序,功能如下图。程序测试过可以使用,但是可能是由于没有定义变量是全局变量还是局部变量的原因,在运行时会偶尔出现一些奇怪的错误。希望有人能给我解答,教我在我这个程序里如何填写局部变量和全局变量。
(defun c:tt( )
(setq a(getreal))
(setq b x)
(fun1) (fun2)
)
(defun fun1( )
(setq c (+ a b))
(setq d y)
)
(defun fun2( )
(setq e z)
(setq f (+ a c e))
) 展开
展开全部
(defun XX ( …… / ……))中XX后面括号里的都是局部变量,括号里没有的变量是全局变量。局部变量中斜杠前的变量是函数的自变量,斜杠后的不是函数的自变量。如
(defun try (x / y)
(setq y (* x x))
(setq z (+ x y z))
)
例子中x,y是局部变量,z是全局变量。局部变量中斜杠前的x是函数try的自变量,斜杠后的y不是自变量。
调用时
(setq x 1 y 2 z 3)
(try 4)
try函数执行时x=4,y=16,z=3,函数返回值为4+16+3=23
程序运行后变量值为x=1,y=2,z=23。函数调用后,局部变量的值没有发生变化,全局变量的值被改变了。可以认为函数内用相同符号表示的局部变量与函数外的全局变量是不同的变量,而函数内外的符号相同的全局变量是同一个变量。
另外,函数名称前具有c:的函数是不允许有自变量的,即函数c:XX的形式只能是
(defun c:XX ( / ……))
式中没有函数自变量。与上例意思相近的程序写成
(defun try (/ x y)
(setq x 4)
(setq y (* x x))
(setq z (+ x y z))
)
啰啰嗦嗦写了不少,不知你能否搞清楚。
(defun try (x / y)
(setq y (* x x))
(setq z (+ x y z))
)
例子中x,y是局部变量,z是全局变量。局部变量中斜杠前的x是函数try的自变量,斜杠后的y不是自变量。
调用时
(setq x 1 y 2 z 3)
(try 4)
try函数执行时x=4,y=16,z=3,函数返回值为4+16+3=23
程序运行后变量值为x=1,y=2,z=23。函数调用后,局部变量的值没有发生变化,全局变量的值被改变了。可以认为函数内用相同符号表示的局部变量与函数外的全局变量是不同的变量,而函数内外的符号相同的全局变量是同一个变量。
另外,函数名称前具有c:的函数是不允许有自变量的,即函数c:XX的形式只能是
(defun c:XX ( / ……))
式中没有函数自变量。与上例意思相近的程序写成
(defun try (/ x y)
(setq x 4)
(setq y (* x x))
(setq z (+ x y z))
)
啰啰嗦嗦写了不少,不知你能否搞清楚。
追问
非常感谢。求解这个程序括号该怎么填
(defun c:tt( )
(setq a(getreal))
(setq b x)
(fun1) (fun2)
)
(defun fun1( )
(setq c (+ a b))
(setq d y)
)
(defun fun2( )
(setq e z)
(setq f (+ a c e))
)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |