只需一步,快速开始
比如,我想写一个很简单的程序,判断选择的对象是不是直线
(defun c:pd(/ lent) (setq lent (car (entsel))) (isline lent) (cond ((= tt "LINE") (princ "right"))))(defun isline(lname) (setq llst (entget lname)) (setq tt (cdr (assoc 0 llst))))
但是在加载的时候就提示错误:“输入的列表有缺陷”,该怎么输呢
使用道具 举报
哈哈,可以了可以了,是我不小心弄错了刚开始。
但是现在还有个问题,子程序的返回值是什么呢?比如上面的tt,好像是全局变量,和其他语言有点不一样
你还没有理解lisp括号的含义啊,每对括号都有返回值。
你的 (isline lent) 似乎没有变量来接收返回值,因此tt就成了全局变量。
(= "LINE" (cdr (assoc 0 (entget (car (entsel))))))
是line的话会返回T,否则返回nil
子函数的返回值就是该子函数最后一条语句的返回值,并且Lisp会将子函数的返回值放到调用该子函数的地方。所以你的那段程序可以这样写:
(defun c:pd(/ lent) (setq lent (car (entsel))) (cond ((= (isline lent) "LINE") (princ "right") ) ))(defun isline(lname) (cdr (assoc 0 (entget lname))))
子程序可以带参数嘛。
也可以用Setq等获取子程序返回的最后一个值。
本版积分规则 发表回复 回帖后跳转到最后一页
小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 ) ©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
GMT+8, 2025-2-24 11:21 , Processed in 0.217139 second(s), 26 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.