明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1263|回复: 6

[基础] 请教大侠:Lisp主程序与子程序位置有什么要求?

[复制链接]
发表于 2010-12-21 11:20:53 | 显示全部楼层 |阅读模式
本帖最后由 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)
)
哪位大侠能不能详细说明一下其中的原因,先谢谢了!

发表于 2010-12-21 11:49:49 | 显示全部楼层
不会啊 我测试很好用!
发表于 2010-12-21 12:22:18 | 显示全部楼层
如果直接运行源码,两者之间的位置先后无所谓.如果该程序经过编译再运行时,一般子程序放在前面,主程序放在后面
 楼主| 发表于 2010-12-21 19:09:10 | 显示全部楼层
先谢谢楼上的回答,不过在我机子上测试是不行的,将主程序放到下面才能运行,难道和软件有关系,我的是2007版,能帮我分析分析是什么原因吗?与全局变量有没有关系?
发表于 2010-12-21 20:03:26 | 显示全部楼层
不用分前后都可以...
发表于 2010-12-22 07:12:01 | 显示全部楼层
一般不必分前后。
与全局变量没有关系。只是自己编辑时,不是全局变量的尽量不使用全局变量......
 楼主| 发表于 2010-12-22 13:52:51 | 显示全部楼层
谢谢楼上的回答,我搞明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-10-2 18:22 , Processed in 0.182621 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表