第一范文网 - 专业文章范例文档资料分享平台

lisp教程 

来源:用户分享 时间:2025/6/28 18:48:24 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

COMMAND : (= (- 50 25) (SQRT 625)) Result : T

设计一简单程序(名称为AIR),在呼叫程序时,检查传入的数值自变量(为空气污染指数)是否大于200(即严重空气污染)

---- 启动文字编辑器,开启TEST.LSP程序文件,输入下列程序代码 :

(DEFUN AIR (NUM) (> NUM 200)) ---- 输入后存盘(纯文字格式)

---- 在AutoCAD绘图模式的指令行提示符号后,使用LOAD函数重新加载程序文件 COMMAND : (LOAD \

---- 在AutoCAD绘图模式的指令行提示符号后,输入自定函数名称及参数执行 COMMAND : (AIR 175) Result : nil COMMAND : (AIR 215) Result : T 四流程控制 第1节

-------------------------------------------------------------------------------- 条件判断

是利用条件函数,配合关系及逻辑运算所设定的一些准则,令程序自行分析,因应情况作出适当行动.

单一条件

(IF 条件表达式 是表达式 [否表达式] )

函数先检查条件表达式,若其传回值为 T,便会执行其后的是表达式

若有提供否表达式,且条件表达式的传回值为 nil,函数将不会执行(跳过)是表达式而执行否表达式 若没有提供否表达式,且条件表达式的传回值为 nil时,函数将不作任何事情 IF函数可以巢状方式嵌套,即在是或否的表达式中加入另一个IF函数

练习 (Exercises)

判断空气污染指数 : 大于100 = Very High, 51至100 = High, 26至50 = Medium, 25或以下 = Low

---- 启动编辑器,开启C:/TEST.LSP程序文件;新增AIR-1自定函数,程序代码如下 : (DEFUN AIR-1 (NUM) (IF (> NUM 100) (PRINC \ery High\ (IF (AND (> NUM 50) (<= NUM 100)) (PRINC \ (IF (AND (> NUM 25) (<= NUM 50)) (PRINC \ (IF (<= NUM 25)) (PRINC \ (PRINC))

程序说明

1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于100;若是则显示字符串Very High响应

2 用IF函数判断变量NUM是否大于50且(AND)小于或等于100;若是则显示High响应 3 用IF函数判断变量NUM是否大于25且(AND)小于或等于50;若是则显示Medium

4 用IF函数判断变量NUM是否小于或等于25;若是则显示Low

5 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的 nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号

IF函数的巢状练习 : 修改上一课的程序练习,将多个IF函数合并成巢状嵌套

---- 启动文字编辑器,开启C:/TEST.LSP程序文件 ---- 新增程序AIR-2,其程序代码如下 :

(DEFUN AIR-2 (NUM) (IF (> NUM 50) (PRINC (IF (> NUM 100) \ery high\ (PRINC (IF (> NUM 25) \ (PRINC))

程序说明

1 设定函数名称,并将数据存入自变量NUM内;用IF函数判断变量NUM是否大于50; 若条件成立(变量NUM大于50)时,再用另一个IF函数判断变量是否大于100;

若条件成立(变量NUM大于100)时,使用PRINC函数显示字符串Very High,否则显示High 2 若在第1个IF函数判断中,条件不成立(变量NUM不大于50)时; 再用另一个IF函数判断变量是否大于25;

若条件成立(NUM大于25)时,显示字符串Medium,否则显示字符串Low

3 是一个没有提供任何自变量的PRINC函数;用以抑制显示答案时尾部符加的 nil 或重复的传回值;而最右一个关括号,是用以对应第1行最左边的开括号

注意 :

第1行最后一个关括号是对应前面的PRINC函数,尾2的关括号则是对应IF函数 (判断NUM是否大于100)

第2行最后一个关括号是对应第1行的IF函数 (判断NUM是否大于50),尾2的关括号则是对应PRINC函数,尾3的关括号则是对应IF函数 (判断NUM是否大于25) 最右边的关括号是对应第1行最左边的开括号

PROGN 函数

在以上各范例中,执行的表达式均为单一的函数运算;若要在表达式中顺序执行一连串的函数,便要将各函数包含在一个PROGN函数内;函数的传回值会是该PROGN函数中,最后一个表达式的运算结果

---- 修改TEST.LSP程序文件的AIR-1程序,第1个IF函数如下,其余的IF函数请自行修改 e.g. (IF (> NUM 100) (PROGN (SETQ DISP \ery High\

注意 : 最后一个关括号是对应前面的IF函数 (判断变量NUM是否大于100) 尾2的关括号是对应PROGN函数 (用以包含SETQ及PRINC函数) 尾3的关括号是对应PRINC函数的

第2节

--------------------------------------------------------------------------------

条件判断

多重条件

(COND [ (条件表达式 是表达式) ....] )

函数会顺序检查各条件表达式;直到其中一个条件成立(传回 T),即执行该条件式所对应的是表达式

每个条件表达式只对应一个是表达式,而没有否表达式

若条件式成立且执行对应的是表达式后,则不会再对余下的其它条件表达式进行检查

若只有条件表达式而没有对应之是表达式,则只会传回条件表达式的逻辑值

若没有提供任何条件表达式及是表达式,函数传回值恒为 nil

练习 (Exercises)

新增程序AIR-3,以改善上一课AIR-1程序;用一个COND函数判断多个条件表达式

DEFUN AIR-3 (NUM) (COND ((> NUM 200) (PRINC \ ((> NUM 100) (PRINC \ery High\ ((> NUM 50) (PRINC \ ((> NUM 25) (PRINC \ ((> NUM 0) (PRINC \ (T (PRINC \ (PRINC))

程序说明

1 设定函数名称,并将数据存入自变量NUM内;用COND函数进行多重判断

2 判断变量NUM是否大于200,若条件成立,则显示 Severe 讯息;第3至6行依此类推 7 注意条件式为一个 T 字母,表示条件式恒为真(成立),显示讯息 Cannot Check 作用是当以上各条件式均不成立时(变量小于或等于0),即执行此一表达式

第3节

--------------------------------------------------------------------------------

循环 (Loop)

配合条件判断,关系及逻辑运算,令程序不断重复一些动作,以提高效率及减少重复动作时的人为错误

可以多个循环形成巢状(嵌套式)循环,即在一个循环内嵌套另一个(或多个)循环

指定的重复次数必须为正整数,亦可以是储存正整数的变量名称

重复指定次数

(REPEAT 重复次数 [表达式 ....] )

e.g. (REPEAT 10 (PRINC \ ;重复显示David字符串10次

重复

(WHILE 条件表达式 [是表达式 ....] )

若条件表达式的传回值为 T,即会顺序执行函数内各表达式

各表达式顺序执行完后,程序会返回函数的开头,重新检查条件表达式的传回值

若条件表达式的传回值为 nil,函数内各表达式将不会被执行

e.g. (SETQ COUNT 1) ;将1存入变数COUNT

(WHILE (<= COUNT 10) ;WHILE函数并检查变量COUNT是否<=10 (PRINC \ ;若条件成立则以PRINC函数显示David字符串

(SETQ COUNT (1+ COUNT))) ;变量COUNT递增1,并将新值重新存入变量COUNT中取代原值

注意 : 第4行最右边的关括号,是对应第2行WHILE函数的开括号

无限循环

又称为死循环,即循环的条件判断式传回值恒为 T,令循环不断重复而无法结束;在上例中 :

---- 若WHILE函数的条件表达式设定为 (T) ;即条件永远成立

---- 不作SETQ函数,或不将变量COUNT递增 ;变量COUNT储存值恒久不变,导致条件式永远成立

第4节

--------------------------------------------------------------------------------

练习 (Exercises)

编写一程序SUM并将自变量存在NUM变量内,计算1+2+3+4 ....至变数NUM的总和

(DEFUN SUM (NUM) (SETQ COUNT 1 TOTAL 0) (WHILE (<= COUNT NUM)

(SETQ TOTAL (+ TOTAL COUNT) COUNT (1+ COUNT)) )

(PRINC TOTAL) (PRINC))

程序说明

1 设定函数SUM并将自变量存入变量NUM,设定变量COUNT以将数目由1开始递增,变量TOTAL(储存总和)初始值为0

2 WHILE循环函数,并设定进入循环的条件式(变量COUNT小于或等于变量NUM)

3 若条件成立即进入循环内部,先将变量TOTAL加上变量COUNT,再用SETQ函数存回变量TOTAL中,覆盖原值

4 将变量COUNT递增1,存回变数COUNT并覆盖原值 5 关括号与第2行的WHILE函数左边的开括号对应

6 循环结束后,用PRINC函数显示变量TOTAL(总和)的内容

程序流程

假设执行程序时传入变量NUM的数值为10

---- 变数初始值 COUNT = 1 TOTAL = 0

---- 判断变量COUNT是否<=变量NUM COUNT = 1 TOTAL = 0

---- 变量COUNT(现值1)小于NUM,进入循环;将TOTAL(现值0)加上COUNT,存回变数TOTAL COUNT = 1 TOTAL = 1

---- 变数COUNT(现值1)递增1变为2,存回变数COUNT COUNT = 2 TOTAL = 1 ---- 返回WHILE函数的开头,重新判断条件式

---- 变量COUNT(现值2)小于NUM,进入循环;将TOTAL(现值1)加上COUNT,存回变数TOTAL COUNT = 2 TOTAL = 3

---- 变数COUNT(现值2)递增1变为3,存回变数COUNT COUNT = 3 TOTAL = 3

---- 返回WHILE函数的开头,重新判断条件式

---- 变量COUNT(现值3)小于NUM,进入循环;将TOTAL(现值3)加上COUNT,存回变数TOTAL COUNT = 3 TOTAL = 6

部 份 过 程 省 略

---- 返回WHILE函数的开头,重新判断条件式

---- 变量COUNT(现值10)仍等于NUM,进入循环;将TOTAL(现值45)加上COUNT,存回变数TOTAL COUNT = 10 TOTAL = 55

---- 变数COUNT(现值10)递增1变为11,存回变数COUNT COUNT = 11 TOTAL = 55 ---- 返回WHILE函数的开头,重新判断条件式

---- 变量COUNT(现值11)巳大于NUM(本范例假设为10),条件判断不成立,循环结束 COUNT = 11 TOTAL = 55

---- 显示变量TOTAL的现存值,程序结束

尝试用IF函数检查输入的自变量是否小于或等于0;若条件成立则不执行余下的程序

(DEFUN SUM (NUM) (IF (<= NIM 0) (PRINC \ (PROGN

略 过 WHILE 及 PRINC 函数 ) )

(PRINC))

程序说明

1 设定函数SUM并将自变量存入变量NUM,并用IF函数判断是否<=0,若条件成立则显示错误讯息 2 若条件不成立,即以PROGN函数包含上例中的循环及显示答案部份

搜索更多关于: lisp教程  的文档
lisp教程 .doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c23hjw19zgx1is530731t_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top