AutoLisp从入门到放弃(十六)
判断式、循环操作
- 一、AutoLisp判断式
- 1、函数(if)
- 2、参数
- 3、返回值
- 4、代码示例
- 二、AutoLisp重复函数
- 1、函数(repeat)
- 2、参数
- 3、返回值
- 4、代码示例
- 三、AutoLisp循环函数
- 1、函数(while)
- 2、参数
- 3、返回值
- 4、代码示例
- 四、AutoLisp多条件式的if整合功能函数
- 1、函数(cond)
- 2、返回值
- 3、代码示例
本章正式开始进入AutoLisp劝退环节,这一章,我们将详细得介绍AutoLisp中的判断式和循环操作。
一、AutoLisp判断式
1、函数(if)
功能重点:检验判断式的结果,如果为T执行表达式1;否则执行表达式2。若表达式超过一行,则务必配合progn函数连接为一组。
函数 | 函数说明 |
---|---|
(if testexpr thenexpr [elseexpr]) | 根据对条件的判断结果,对两个表达式求值。 |
2、参数
参数 | 说明 |
---|---|
testexpr | 判断式,用于执行判断的式子,返回值为T或nil。 |
thenexpr | 表达式1,如果判断式返回T,则执行该表达式。 |
elseexpr | 表达式2,如果判断式返回nil,则执行该表达式。 |
3、返回值
if函数返回选定表达式的值。如果未指定elseexpr且 testexpr为nil,则if返回nil。
4、代码示例
判断用户输入的两个整数值的大小关系
(setq #iNum1 (getint "\n请输入第一个整数:")#iNum2 (getint "\n请输入第二个整数:"))
(if (> #iNum1 #iNum2)(princ "#iNum1 > #iNum2")(princ "#iNum1 <= #iNum2")
) ;if
上述代码中的if判断式中并没有过于复杂的逻辑,但是在实际应用中,我们可能需要在同一个表达式中执行很多的操作,这时候我们就需要使用progn函数将多个表达式合并成一个表达式来执行。例如下面的例子:
根据用户输入绘制圆形,如果用户输入有效则绘制并输出绘制成功信息,反之,输出错误信息,并弹框提示。
(defun C:DrawCircle(/ #ptCenter #dRadius)(setq #ptCenter (getpoint "\n请指定圆心:")#dRadius (getreal "\n请指定半径:"))(if (> #dRadius 0)(progn (command "circle" #ptCenter #dRadius "")(princ "成功绘制圆形。"));progn(progn (alert "半径不合法!")(princ "绘制圆形失败。"));progn);if
)
二、AutoLisp重复函数
1、函数(repeat)
功能重点:重复执行N次循环内的表达式。
函数 | 说明 |
---|---|
(repeat int [expr…]) | 对循环体中的每一个表达式进行指定次数的求值计算,并返回最后一个表达式的值。 |
2、参数
参数 | 说明 |
---|---|
int | 正整数。表示循环的重复次数。 |
expr | 一个或多个原子或表达式。 |
3、返回值
最后一个计算的原子或表达式的值。如果未提供 expr 参数,repeat 返回 nil。
4、代码示例
求1+2+3+4+…+100的值。
(defun C:CalSum(/ #iTemp #iSumAll)(setq #iTemp 1#iSumAll 0)(repeat 100(setq #iSumAll (+ #iSumAll #iTemp)#iTemp (1+ #iTemp)));repeat(princ "1+2+3+...+100 = ")(princ #iSumAll)(princ)
)
三、AutoLisp循环函数
1、函数(while)
功能重点:当判断式结果为T时,执行循环内的表达式,直到判断结果为nil。如果判断式结果始终为T,则为死循环。
函数 | 说明 |
---|---|
(while testexpr [expr…]) | 对测试表达式进行求值,如果它不是 nil,则执行循环体中的表达式,重复这个过程,直到测试表达式的求值结果为 nil。 |
2、参数
参数 | 说明 |
---|---|
testexpr | 包含测试条件的表达式。 |
expr | 在 testexpr 为 nil 之前要求值的一个或多个表达式。 |
3、返回值
最后的 expr 表达式最新的值。
4、代码示例
求1+2+3+4+…+100的值。
(defun C:CalSum(/ #iTemp #iSumAll)(setq #iTemp 1#iSumAll 0)(while (<= #iTemp 100)(setq #iSumAll (+ #iSumAll #iTemp)#iTemp (1+ #iTemp)));while(princ "1+2+3+...+100 = ")(princ #iSumAll)(princ)
)
四、AutoLisp多条件式的if整合功能函数
1、函数(cond)
功能重点:多条件式的if整合功能,由上而下逐一比较,执行其中之一。当某一判断式成立的时候,执行对应的表达式。如果判断式皆不成立且有T值存在,则执行T值之后的表达式。
函数 | 说明 |
---|---|
(cond [(test result …) …]) | cond 函数的参数可以为任意数目的表。它按顺序对每一个表的第一项求值,直到其中之一的返回值不是 nil 为止。该函数接着对该项后续的其他表达式求值。 |
2、返回值
被执行的结果处理表达式中最后一个表达式的值。如果子表中只有一个表达式(即 result 不存在),则返回 test
的值。如果未指定参数,cond 返回 nil。
3、代码示例
实现程序,根据用户输入A0、A1、A2、A3、A4之后绘制出指定图框大小的矩形。
(defun C:InitPaperSet(/ #strPaperSet #ptStart #ptEnd)(setq #strPaperSet (getstring "\n请输入图纸大小(A0/A1/A2/A3/A4)<A3>:"))(if (= #strPaperSet "")(setq #strPaperSet "A3"));if(setq #strPaperSet (strcase #strPaperSet)) ;; 统一转换为大写(cond ((= #strPaperSet "A0") (setq #ptEnd (list 1189 841 0)))((= #strPaperSet "A1") (setq #ptEnd (list 841 594 0)))((= #strPaperSet "A2") (setq #ptEnd (list 594 420 0)))((= #strPaperSet "A3") (setq #ptEnd (list 420 297 0)))((= #strPaperSet "A4") (setq #ptEnd (list 297 210 0)))(T nil));cond(setq #ptSatrt (list 0 0 0))(command "rectang" #ptSatrt #ptEnd)(command "zoom" "A")(princ)
)
AutoLisp从入门到放弃(十六)相关推荐
- AutoLisp从入门到放弃(六)
AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...
- keras从入门到放弃(十六)内置预训练网络VGG
什么是预训练网络 一个常用.高效的在小图像数据集上深度学习的方法就是利用预训练网络.一个预训练网络只是简单的储存了之前在大的数据集训练的结果,通常是大的图像分类任务.如果原始的数据集已经足够大,足够一 ...
- AutoLisp从入门到放弃(十四)
AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...
- AutoLisp从入门到放弃(十二)
AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...
- AutoLisp从入门到放弃(十)
AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...
- 深度学习入门笔记(十六):计算机视觉之边缘检测
欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...
- 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现
无人驾驶汽车系统入门(二十六)--基于深度学习的实时激光雷达点云目标检测及ROS实现 在前两篇文章中,我们使用PCL实现了在点云中对地面的过滤和点云的分割聚类,通常来说,在这两步以后我们将对分割出来的 ...
- (转)tensorflow入门教程(二十六)人脸识别(上)
https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...
- GPS从入门到放弃(六) --- 开普勒轨道参数
GPS从入门到放弃(六) - 开普勒轨道参数 开普勒轨道参数是用于描述卫星轨道的,GPS卫星的无摄椭圆轨道运动就是用开普勒轨道参数来描述.参考GPS导航电文,电文中的星历和历书都是用开普勒轨道参数来描 ...
- System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出
System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 文章目录 System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 一.ADC应用之音频信 ...
最新文章
- 为不同目录设置Forms身份验证
- 【数据竞赛】基于LSTM模型实现共享自行车需求预测
- android studio 新建函数注释模板
- 51nod 1600 Simplr KMP(后缀自动机+维护树上的数据结构)
- BIOS设置开机密码
- 适用于Linux的Windows子系统WSL
- 单条MySQL最长_MySQL 单条记录长度最大65535
- 关于Axure RP
- 5.2探究执行器(Executors)
- 滤波ad毛刺 c语言算法,Σ-Δ型ADC AD7124和AD717x的后置/增强型滤波器
- linux sendto函数,sendto - Linux C 函数 使用手册
- matlab矩阵特征值分解,矩阵特征值分解与奇异值分解含义解析及应用
- jQuery 样式操作
- webStrom找回删除的文件
- windows 10 ltsc 安装微软商店
- linux程序设计x11,让Linux支持X11 Forwarding
- qlikview连接mysql_QlikView 通过ODBC 连接IBM DB2
- mysql 5.7 压缩包解压安装过程
- java爬取今日头条文章
- sqlite 中函数--nullif()、ifnull()、strftime()及时间格式函数
热门文章
- onbeforeunload不触发_各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
- VBS基础教程(第二版)
- 模型涨点的思路,深度学习训练的tricks-计算机视觉
- 破冰、融合、同心 —— 沃创云开展2021年户外团建活动
- 内存管理:内存空间的扩充
- drwtsn32.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉
- OPENCV420版本CV_INTER_LINEAR
- 银行金融 智能业务对话机器人 实战案例
- html5中的target属性,HTML中target属性是什么意思
- 2010国内五大网页模板下载站