AutoLISP语言

更新时间:2023-08-28 22:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

人工智能语言 Lisp

第十二讲 AutoLISP语言 AutoLISP语言

人工智能语言 Lisp

关于AutoLISP语言 关于AutoLISP语言LISP是广为应用的人工智能语言之一。 多用于知识库、 LISP是广为应用的人工智能语言之一。 多用于知识库、专家 是广为应用的人工智能语言之一 系统、机器人、博弈等带有逻辑推理性质的方面。 系统、机器人、博弈等带有逻辑推理性质的方面。 LISP 有多种版本,如GCLISP、Micro LISP、Inter LISP、 有多种版本, GCLISP、 LISP、 LISP、 Common LISP。 LISP。 AutoLISP语言的特点 AutoLISP语言的特点 AutoLISP 综合了人工智能语言 LISP 的特性和 AutoCAD 强大 的图形编辑功能的特点, 语言。 的图形编辑功能的特点,可谓是人工智能 CAD 语言。 AutoLISP 是嵌入在 AutoCAD 内部的LISP编程语言。它采用了 内部的LISP编程语言 编程语言。 最相近的语法和习惯约定。 它既具有Common 和 Common LISP 最相近的语法和习惯约定。 它既具有Common LISP的一些特性 LISP的一些特性,又针对 AutoCAD 增加了许多功能。 的一些特性, 增加了许多功能。 程序和AutoCAD命令透明地结合起来,使设 命令透明地结合起来, 可以把 AutoLISP程序和 程序和 命令透明地结合起来 计和绘图完全融合为一体。 计和绘图完全融合为一体。可实现对 AutoCAD当前图形数据库 当前图形数据库 的直接访问和修改、定义新的命令、实现参数化绘图、 的直接访问和修改、定义新的命令、实现参数化绘图、扩充 AutoCAD 的现有功能,是开发 的现有功能,是开发AutoCAD 的强有力的工具。 的强有力的工具。 AutoLISP语言数据类型丰富、语法简洁、易于掌握。 语言数据类型丰富、 语言数据类型丰富 语法简洁、易于掌握。 AutoLISP程序解释执行。 程序解释执行。 程序解释执行

人工智能语言 Lisp

AutoLISP 语言的数据类型AutoLISP不需要对变量进行数据类型说明,直接对变量赋值, AutoLISP不需要对变量进行数据类型说明,直接对变量赋值,值的 不需要对变量进行数据类型说明 数据类型即为变量的数据类型。 数据类型即为变量的数据类型。 AutoLISP有以下数据类型 AutoLISP有以下数据类型: 有以下数据类型: INT(整型) ……、 等字符组成, (1) INT(整型) 由0、1、2、……、9、+、- 等字符组成,正数的加号 是任选的。整数的大小与所使用的计算机系统有关。 是任选的。整数的大小与所使用的计算机系统有关。 REAL(实型) 用双精度浮点数表示,至少有14位有效精度 位有效精度。 (2) REAL(实型) 用双精度浮点数表示,至少有14位有效精度。 0.12× 可表示为0.12E9 0.12×109可表示为0.12E9 (setq a 1) 整型 (setq b 1.5) 实型 程序运行时, 程序运行时,可随意改变变量的类型 (setq a 1) a为整型 a为 …… (setq a 1

.5) a为实型 a为 ……

人工智能语言 Lisp

(3) STR(字符串) ) (字符串) 字符串又称字符常数,用双引号扩起,最大长度为100,最小长度为本 , 字符串又称字符常数,用双引号扩起,最大长度为 ,最小长度为本0, 即空串。 即空串。 控制字符需用“ 为前导 例如“ 为换行 若字符串含“ , 为前导, 为换行, 控制字符需用“\”为前导,例如“\n”为换行,若字符串含“\”,需再 加一个“ 。 加一个“\”。 例如“ : 例如“B:\USER”,应表示为“B:\\USER ”。 ,应表示为“ : 。 (4) SYM(符号) ) (符号) 符号可作为变量名、函数名等标识。其长度不限,不能以数字开头, 符号可作为变量名、函数名等标识。其长度不限,不能以数字开头, 由下列字符以外的可打印字符组成: 由下列字符以外的可打印字符组成: (、)、.、‘、“、;、,、空格 、,、空格 、 、、 、,、 符号中的大小写是等效的。 符号中的大小写是等效的。 LIST( (5) LIST(表) LISP的含义就是表处理 表以“ LISP的含义就是表处理。表以“(”开始,以“)”结束,内含若干元 的含义就是表处理。 开始, 结束, 元素可以是数值、字符串、符号或其它的表,也可以为空。例如: 素。元素可以是数值、字符串、符号或其它的表,也可以为空。例如: PI))( ))(COS PI)))。 (+ (SIN (* 0.5 PI))(COS (* 0.25 PI)))。 从此例看出,表中的元素可以是不同类型的。 从此例看出,表中的元素可以是不同类型的。 用表可方便地构造复杂的数据结构, 用表可方便地构造复杂的数据结构,例如 2)可作为二维点, (1 2)可作为二维点, 可作为三维点。 (1.5 2.6 3.7) 可作为三维点。

人工智能语言 Lisp

AutoLISP的程序结构Autolisp没有“语句”这一术语,程序一般由一个或一系列按顺序排列的 标准表所组成。 例如: (setq x 25.0) ;;;给x赋值 (setq y 12.2) ;;;给y赋值 (+ (* x y) x) ;;;表示xy+x Setq、+、*,内部函数;X、y为变量。 程序特点: 1 以表的形式出现,且左右匹配。 2 程序阅读函数是从左到右的规则。 3 函数必须放在表中的第一个元素的位置,表中的函数与参数、参数与参数 之间至少要有一个空格分开,但元素与括号之间不用空格。 4 两个表之间或表内的多余空格和回车是不需要的,故一个表可多行,一行 可写多个表。 5 程序以扩展名“*.lsp”的ASCII码文本文件的形式表示。

人工智能语言 Lisp

Autolisp函数 Autolisp函数可分为系统内部函数和用户自定义的外部函数。 Autolisp对函数的调用是通过标准表来实现的,一般格式为: (函数名 [参数1] [参数2] [参数3] ……)

系统内部函数赋值与禁止表达式求值函数 1 (

SETQ 符号1 表达式1 [符号2 表达式2] ...) 符号1 表达式1 [符号 表达式2] 符号2 将符号1的值置为表达式1的计算结果,返回最后一个表达式的计算结果。 将符号1的值置为表达式1的计算结果,返回最后一个表达式的计算结果。 例如: 例如: “ABC”) 返回ABC (SETQ A 1 B 25 C “ABC”) 返回ABC 2 (QUOTE 表达式) 禁止表达式求值, 等价于 ‘表达式。例如: (SETQ 表达式) 禁止表达式求值, 表达式。例如: P1 (QUOTE (1.5 2.6)))返回(1.5 2.6) 2.6)))返回 返回(1.5 (SETQ P1 ‘ (1.5 2.6)) 返回(1.5 2.6) 返回(1.5

3 数学函数返回所有数之和。 (1) (+ 数 数 ...) 返回所有数之和。 ) 返回第一个数减去其后所有数之差。 (2) (- 数 数 ...) 返回第一个数减去其后所有数之差。 ) 返回所有数之积。 ( 3) (* 数 数 ...) 返回所有数之积。 ) 返回第一个数除以其后所有数之商。 ( 4) (/ 数 数 ...) 返回第一个数除以其后所有数之商。 ) 返回该数加1之和 之和。 ( 5) (1+ 数) 返回该数加 之和。 ) 返回该数减去1之值 之值。 (6) (1- 数) 返回该数减去 之值。 )

人工智能语言 Lisp

返回该数之绝对值。 (7) (abs 数) 返回该数之绝对值。 ) 自然对数)之 次方。 (8) (exp 数) 返回 e (自然对数 之“数”次方。 ) 自然对数 )(squrt 数)数的平方根。 数的平方根。 (9)( )( 返回底数之"数 次方 次方。 (10) (expt 底数 数) 返回底数之 数"次方。 ) 将该数转换为整型数。 (11) (fix 数) 将该数转换为整型数。 ) 将该数转换为实型数。 (12) (float 数) 将该数转换为实型数。 ) 返回数1和数 之最大公约数。 和数2之最大公约数 (13) (gcd 数1 数2) 返回数 和数 之最大公约数。 ) 返回该数之自然对数。 (14) (log 数) 返回该数之自然对数。 ) 返回这些数中之最大数。 ( 15 ) (max 数 数...) 返回这些数中之最大数。 返回这些数中之最小数。 ( 16 ) (min 数 数...) 返回这些数中之最小数。 返回数1除以数 之余数。 除以数2之余数 ( 17 ) (rem 数1 数2) 返回数 除以数 之余数。

4 三角函数 (角度为弧度) 角度为弧度)返回该数(角度 之正弦值。 角度)之正弦值 (1) (sin 数) 返回该数 角度 之正弦值。 ) 返回该数(角度 之余弦值。 角度)之余弦值 (2) (cos 数) 返回该数 角度 之余弦值。 ) )(atan 数1 [数2])返回数的反正切值。 ( 3)( )( 数 )返回数的反正切值。 数的运算规则: 若所有参数为整型数,则作整数计算;若表中有一个元素为实型数,则作浮点运算;若参数表中 的参数多于两个,则从前到后,每两个进行数值运算,再把结果与下一个参数进行运算。

人工智能语言 Lisp

举例 编程: 1 χ3+χ2+χ+1,χ=4 2 COS2χ+χ·SINχ/2

答: 1(setq x 4) (1+ (+ (expt x 3) (* x x) x)) 2 (+ (cos (* 2.0 x)) (* x (sin (/ x 2))) )

人工智能语言 Lisp

表处理函数 表中数据提取函数 1 (car <表>)提取表中的第一个元素。 例: (car ‘(a)) (car ‘((a b) c d)) (car ‘()) 2 (cdr<表>)提取表中第一个元素以外的所有元素。 例: (cdr ‘(a c d)) (cdr ‘(a b) c) (cdr ‘()) (cdr ‘(a)) 3 car和cdr的组合函数 (cadr <表>)相当于 (car (cdr <表>)) (cadar <表>) 相当于 (car (cdr (car <表>))) 例: (setq p ‘(5.0 6.0 7.0)) (setq x (car p)) (setq y (cadr p)) (setq z (caddr p)) 4 (last <表>) 返回表中顶层元素的最后一个元素。 (last ‘(a b ‘(c (d e)))) 5 (nth <n> <表>) n=0,1,2,3 …返回表中第n个元素 (setq Rt ‘(5 10 15 20 25 30)) (setq R0 (nth 0 Rt) R1 (nth 1 Rt) R2 (nth 2 Rt …))

人工智能语言 Lisp

构造和修改表中的元素 (list <表达式> …) 将多个<表达式>串联在一起,返回由它们组成的表。 例:(list ‘a ‘b ‘c) (A B C) (list ‘a ‘(b c) ‘d) (A (B C) D) (append <表达式>…) 将所有的<表>串联在一起,返回由它们组成的新表。 例: (append ‘(a b) ‘(c)) (A B C) (append ‘(‘(a) ‘(b)) ‘(c) ) (‘(A) ‘(B) C) (append ‘(a) (list (list (2 3)))) (A (2 3)) (cons <新的第一个元素> <表>) 将<新的第一个元素>加入到<表>的开头,构成新表。 (cons nil ‘(b c)) (nil B C) (cons ‘(a) ‘(b c)) ((A) B C) (reverse <表达式>) 将<表>中的顶层元素倒排序。 例: (reverse ‘(a (b c) f)) (F (B C) A)

人工智能语言 Lisp

表检索与表替换 (assoc <关键字> <连接表>) 连接表又称A—表:以子表为元素组成的表。提取包含关键字组 成的表。 例: (setq a ‘( (name box) (width 3) (size 4.5) (depth 5))) (assoc ‘size a) (size 4.5) (assoc ‘hight a) nil (subst <新项> <旧项> <表>) 从<表>中搜索<旧项>,将<旧项>分别用<新项>代替。 例: (setq sample ‘(a b (c d) b)) (subst ‘qq ‘b sample) (subst ‘qq ‘(c d) sample) (subst ‘(qq rr) ‘z sample)

人工智能语言 Lisp

练习 如图矩形ABCD,给B、C、D赋值。 三角皮带轮的尺寸存储与读取。

解答型号 O A B C D E F he 2.5 3.5 5 6 8.5 10 12.5 H 9.5 12 15 20 28 33 42 e 12 15 20 25.5 37 44.5 58 f 8 10 12.5 17 24 29 38 h1 5.5 6 7.5 10 12 15 18 b0 10.2 13.4 17.4 22.6 32.9 38.9 50.6

解答

人工智能语言 Lisp

答案 (setq A ‘(30 20)) (setq b (list (+ 60 (car a)) (cadr a))) (setq c (list (car b) (+ 30 (cadr b)))) (setq d (list (car a) (cadr c))) (command “line” a b c d “c”) (setq a0 (list “O” 2.5 9.5 12 8 5.5 10.2)) (setq aA (list “A” 3.5 12 15 10 6 13.4)) (setq aB (list “B” 5 15 20 12.5 7.5 17.4)) (setq aC (list “C” 6 20 25.5 17 10 22.6)) (setq aD (list “D” 8.5 28 37 24 12 32.9)) (setq aE (list “E” 10 33 44.5 29 15 38.9)) (setq aF (list “F” 12.5 42 58 38 18 50.6))

(setq a (list Ao Aa Ab Ac aD aE aF)) (setq type (getstring “type (O,A,B,C,D,E,F)=?”));;;用户输入带轮型号 (setq type (s

trcase type)) (setq lis (assoc type a)) (setq he (nth 1 lis)) (setq H (nth 2 lis)) ……

人工智能语言 Lisp

自定义函数 1 (defun <函数名> <形参表> <表达式> ……) defun是Autolisp函数的一个特殊函数,功能是定义一个用户函数。 例1:;;;;z=x+y (defun addxy (x y) (setq z (+ x y)) ) addxy:函数名; (setq z (x y)):表达式; (x y): 形参表 x、y:局部变量 z:全局变量 例 2:;;;;f(x)=a0+a1x+a2x2+a3x3+a4x4,a0=a1=a2=a3=a4=1,x= 1. (defun f(x) (a0 a1 a2 a3 a4 x) (+ a0 (* a1 x) (* a2 (* x x)) (* a3 (expt x 3)) (* a4 (expt x 4)) ) ) 例3:;;;;定义一个将度转换为弧度的函数。dtr(a)=π×a/180

人工智能语言 Lisp

Autolisp语言(2) DEFUN函数说明 (1) 函数名和形参表必须是符号原子。 (2)函数调用时,形参被实参代替,<形参表>必须有,但可以 是空表()。 (3)其后的表达式个数不限,在函数调用时对它们进行计算。 (4)DEFUN函数的回送值是<函数名>,而不是一个值。所建立 的函数在以后的调用时才回送实际函数值。 (5)函数调用步骤: a.用文本编辑器编辑 *.lsp 文件。 b.用函数调用,格式:(load “盘符:/路径/…/文件名”) c.执行定义函数: (addxy 3 4) (6)利用DEFUN可以增加AutoCAD命令,定义规则如下: a.函数名必须是C:ADDXY(/ X Y Z) b.形参表必须是空表、局部变量,不能为全局变量,即无形参。 c执行定义函数: ADDXY.

人工智能语言 Lisp

举例 (defun dtr(a) (* a (/ pi 180.0)) ) Command: (load "d:/user") DTR Command: (dtr 180) (defun C:TRIGON(/ P1 P2) (setq P1 (getpoint “lower left corner:”)) (setq len (getreal “length of one side:”)) (setq P2 (polar P1 0 len)) (setq P3 (polar P2 (/ (* 2 pi) 3.0) len)) (command “pline” P1 P2 P3 “c”)) ) Command: (load "d:/user1") C:TRIGON Command: TRIGON

人工智能语言 Lisp

交互输入函数(get~ [<提示>]) <提示>为任意字符串,起解释说明的作用。 get~ :允许用户输入的类型。 (1)(getint [提示]) (setq a (getint “scale factor:”)) (2)(getreal [提示]) (setq b (getreal “input a real-num:”)) (3)(getstring [提示]) (setq c (getstring “what your name:”)) (4)(getpoint [<基点> <提示>]) (setq d (getpoint ‘(3 4) “point:”)) (5)(getcorner <基点> [提示]) (setq e (getcorner ‘(20 30) “corner:”)) (6)(getdist [<基点> <提示>]) (setq f (getdist ‘(50 40) “how long”)) (7)(getangle [<基点> <提示>]) (setq ang (getangle “enter angle:”)) (8)(getkword [提示]) 需与(9)配合使用。

位值 1 2 4

控制意义

位值 8 16 32

控制意义

不接受空输入 不接受零值 不接受负值

允许在图形界限内输入一个点。 返回三维点而不是二维点 用虚线画橡皮筋或拉伸框

人工智能语言 Lisp

[<位值> <关键字符串>]) 输入控制函数, 只影响一个get类函 数,以后便自动丢弃。 例如: (iniget “Yes No”) (setq k (getword “are you sure?

(Y/N)”)) (Iniget (+ 1 2 4)) (setq age (getint “how old are you?”)) 图形处理函数 1 (angle <点1> <点2>) 点 点 返回点1、 直线与X轴正向之夹角 弧度)。 返回点 、点2直线与 轴正向之夹角 弧度 。角度按逆时针 直线与 轴正向之夹角(弧度 2 (distance <点1> <点2>) 点 点 返回点1和点 之距离。 和点2之距离 返回点 和点 之距离。 3 (polar <点> <方向角 <距离 点 方向角> 距离>) 方向角 距离 返回距点为指定距离和角度(弧度)的另一点。 返回距点为指定距离和角度(弧度)的另一点。 4 (inters <> <> <> <> [任选项]) 求点1、2和点3、4连线的交点坐标,若任选项为nil,则可求延长线的交点; 若任选项不存在或值为非nil,则交点必须在线内。 目标扑捉函数 (osnap <目标> “扑捉方式”) 扑捉方式:NEA、ENDP、MID、CEN、INT、PER、TAN

(9)(initget

人工智能语言 Lisp

Command函数

AutoLISP利用Command函数可以方便地调用几乎全部AutoCAD命令,以 完成各种工程图形的绘制任务。Command函数是实现在Autolisp程序中调用AutoCAD命令的唯一途径。

调用格式: (Command <参数> ……) 例如: () 说明: 1。 <参数> 即为CAD的命令、子命令或命令参数、所需数据。Command函 数中调用的<参数> 类型、个数及其顺序和AutoCAD命令严格对应。 < > AutoCAD 如: (command “line” “30,40” “100,200” “”) (command “line” ‘(30 40) ‘(100 200) “”) 2。 AutoCAD的命令、子命令、选择项用不含空格的字符串表示,大小写均 可。 3。“”表示回车。 4。显示画圆,最后不需要回车。 如: (command “circle” ‘(80 80) 40)

本文来源:https://www.bwwdw.com/article/1ddi.html

Top