判断式、循环操作

  • 一、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从入门到放弃(十六)相关推荐

  1. AutoLisp从入门到放弃(六)

    AutoLisp从入门到放弃(六) 一.获取图元属性信息 二.修改图元属性信息 本章主要讲解如何通过AutoLisp代码查看.修改实体的所有属性信息,即图元信息. 一.获取图元属性信息 如果你是一个C ...

  2. keras从入门到放弃(十六)内置预训练网络VGG

    什么是预训练网络 一个常用.高效的在小图像数据集上深度学习的方法就是利用预训练网络.一个预训练网络只是简单的储存了之前在大的数据集训练的结果,通常是大的图像分类任务.如果原始的数据集已经足够大,足够一 ...

  3. AutoLisp从入门到放弃(十四)

    AutoLisp从入门到放弃(十四) AutoLisp选择集操作 AutoLisp从入门到放弃(十四) 一.ssget 1.函数说明 2.参数说明 3.代码示例 二.ssadd.ssdel 1.函数说 ...

  4. AutoLisp从入门到放弃(十二)

    AutoLisp从入门到放弃(十二) 一.文件操作 1.打开文件(open) 2.读文件(read-line.read-char) 3.写文件(write-line.write-char) 4.关闭文 ...

  5. AutoLisp从入门到放弃(十)

    AutoLisp从入门到放弃(十) 一.角度计算(angle) 二.距离计算(distance) 三.点坐标偏移计算(polar) 四.计算两直线交点(inters) 五.获取捕捉点(osnap) 本 ...

  6. 深度学习入门笔记(十六):计算机视觉之边缘检测

    欢迎关注WX公众号:[程序员管小亮] 专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具 ...

  7. 无人驾驶汽车系统入门(二十六)——基于深度学习的实时激光雷达点云目标检测及ROS实现

    无人驾驶汽车系统入门(二十六)--基于深度学习的实时激光雷达点云目标检测及ROS实现 在前两篇文章中,我们使用PCL实现了在点云中对地面的过滤和点云的分割聚类,通常来说,在这两步以后我们将对分割出来的 ...

  8. (转)tensorflow入门教程(二十六)人脸识别(上)

    https://blog.csdn.net/rookie_wei/article/details/81676177 1.概述 查看全文 http://www.taodudu.cc/news/show- ...

  9. GPS从入门到放弃(六) --- 开普勒轨道参数

    GPS从入门到放弃(六) - 开普勒轨道参数 开普勒轨道参数是用于描述卫星轨道的,GPS卫星的无摄椭圆轨道运动就是用开普勒轨道参数来描述.参考GPS导航电文,电文中的星历和历书都是用开普勒轨道参数来描 ...

  10. System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出

    System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 文章目录 System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 一.ADC应用之音频信 ...

最新文章

  1. 为不同目录设置Forms身份验证
  2. 【数据竞赛】基于LSTM模型实现共享自行车需求预测
  3. android studio 新建函数注释模板
  4. 51nod 1600 Simplr KMP(后缀自动机+维护树上的数据结构)
  5. BIOS设置开机密码
  6. 适用于Linux的Windows子系统WSL
  7. 单条MySQL最长_MySQL 单条记录长度最大65535
  8. 关于Axure RP
  9. 5.2探究执行器(Executors)
  10. 滤波ad毛刺 c语言算法,Σ-Δ型ADC AD7124和AD717x的后置/增强型滤波器
  11. linux sendto函数,sendto - Linux C 函数 使用手册
  12. matlab矩阵特征值分解,矩阵特征值分解与奇异值分解含义解析及应用
  13. jQuery 样式操作
  14. webStrom找回删除的文件
  15. windows 10 ltsc 安装微软商店
  16. linux程序设计x11,让Linux支持X11 Forwarding
  17. qlikview连接mysql_QlikView 通过ODBC 连接IBM DB2
  18. mysql 5.7 压缩包解压安装过程
  19. java爬取今日头条文章
  20. sqlite 中函数--nullif()、ifnull()、strftime()及时间格式函数

热门文章

  1. onbeforeunload不触发_各浏览器对 onbeforeunload 事件的支持与触发条件实现有差异
  2. VBS基础教程(第二版)
  3. 模型涨点的思路,深度学习训练的tricks-计算机视觉
  4. 破冰、融合、同心 —— 沃创云开展2021年户外团建活动
  5. 内存管理:内存空间的扩充
  6. drwtsn32.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉
  7. OPENCV420版本CV_INTER_LINEAR
  8. 银行金融 智能业务对话机器人 实战案例
  9. html5中的target属性,HTML中target属性是什么意思
  10. 2010国内五大网页模板下载站