请教大侠:Lisp主程序与子程序位置有什么要求?
本帖最后由 zhu320211 于 2010-12-21 11:20 编辑请教大侠:Lisp主程序与子程序位置有什么要求?
我是一个新手,找了本《AutoLISP & DCL基础篇》照着做,在子程序这一章遇到了问题,想了很久也没弄明白,难道是书搞错了,应该不会吧?我把书上的例子原样不动照搬测试就是不行,书上的主程序在前,子程序在后,执行后返回子程序名,将主程序放到子程序后面后,就能正常运行了,但是子程序中包含子程序却可以调用在前,被调用在后,想不明白,把原书的代码贴上来:
(defun c:pbox ()
(get_pbox_data)
(draw_pbox)
(prin1)
)
(defun get_pbox_data ()
(setq pa (getpoint "输入左下角点:"))
(setq ww (getdist pa "\n宽度ww:"))
(setq hh (getdist pa "\n高度hh:"))
)
(defun draw_pbox ()
(setq pb (polar pa 0 ww))
(setq pc (polar pb (/ pi 2) hh))
(setq pd (polar pc pi ww))
(command "pline" pa pb pc pd "c")
(setq mp1 (get_midpt pa pb))
(setq mp2 (get_midpt pb pc))
(setq mp3 (get_midpt pc pd))
(setq mp4 (get_midpt pd pa))
(command "line" mp1 mp3 "")
(command "line" mp2 mp4 "")
)
(defun get_midpt (pt1 pt2)
(setq mx (/ (+ (car pt1) (car pt2)) 2))
(setq my (/ (+ (cadr pt1) (cadr pt2)) 2))
(list mx my)
)
哪位大侠能不能详细说明一下其中的原因,先谢谢了!
不会啊 我测试很好用! 如果直接运行源码,两者之间的位置先后无所谓.如果该程序经过编译再运行时,一般子程序放在前面,主程序放在后面 先谢谢楼上的回答,不过在我机子上测试是不行的,将主程序放到下面才能运行,难道和软件有关系,我的是2007版,能帮我分析分析是什么原因吗?与全局变量有没有关系? 不用分前后都可以... 一般不必分前后。
与全局变量没有关系。只是自己编辑时,不是全局变量的尽量不使用全局变量...... 谢谢楼上的回答,我搞明白了
页:
[1]