Visual LISP 第2章 数据类型、表达式和函数(5)函数

1.定义AutoLISP函数

  (defun 函数名(变元……/局部变量……)表达式)

  (1)函数名与变量名的命名规则相同,不应与现有AutoLISP函数重名,否则,现有函数将被新定义的功能所取代。(2)变元即参数。即便没有变元也不能省略"()"。(3)局部变量。这里的局部变量是指局限于该函数内部所用的变量,只在该函数调用期间得到定义,调用结束,局部变量的值均为nil,同事释放所占存储空间。如不声明,它们则将成为全局变量。局部变量的声明不仅可以节省存储空间,还可以避免函数之间相互干扰。局部变量和变元之间用除号隔开。即使没有变元,也可以后局部变量说明,必须加除号。(4)表达式。用于描述该函数的运算。(5)返回值。最后一个表达式返回值即为该函数的返回值。

  【例】定义一个已知圆柱体的半径和高,计算其体积的函数,源代码如下:

1 ( defun volume(r h / v)
2     ( setq v( * r r pi h))
3 )

  该函数的函数名是volume,两个变元r(半径)和h(高度),有一个局部变量v,返回表达式( setq v( * r r pi h))的值。

2.调用AutoLISP函数

  (函数名[变元]……)

  

3.递归定义AutoLISP函数

  AutoLISP可以在一个函数内部定义另一个函数,也可以递归定义函数。

 【例】定义阶乘函数。

4.调用AutoCAD命令

  AutoLISP用command函数调用AutoCAD命令,其格式为:(command "AutoCAD命令" "命令所需的数据"……)

  【例】绘制以(2,4)为圆心,5为半径的圆和(-2,-4)为圆心,5为半径的圆

 (command "circle" "2,4" "5")

(command "circle" ‘(-2 -4) 5)

  【例】已知p1,p2,p3为不在同一条直线上的三个点,利用这三个点画圆

1 (setq p1 ‘(100 100))
2 (setq p2 ‘(-100 100))
3 (setq p3 ‘(-100 -100))
4 (command "circle" "3p" p1 p2 p3)

  【例】绘制p1(0,0)到p2(10,0)的一段直线

(command "line" "0,0" "10,0" "")
(command "line" ‘(0 0) ‘(10 0) "")
(command "line" (list 0 0) (list 10 0) "")

  最后的双引号代表一个回车或空格。(书上第13页【例2-6】的最后一种画线方法实验失败,所以就不写了)。

5.定义AutoCAD命令

  用defun函数定义AutoCAD命令,格式如下:

  (defun C:AutoCAD命令名 (/局部变量……) 表达式……)

  定义AutoCAD命令与定义函数基本相同,不同之处有两点:(1)命令名前加"C:"。(2)变元表内没有变元,但可以有局部变量说明。此外,还要注意所定义的AutoCAD命令不应与现有的AutoCAD命令重名。

时间: 2024-10-27 06:00:53

Visual LISP 第2章 数据类型、表达式和函数(5)函数的相关文章

Visual LISP 第2章 数据类型、表达式和函数(3)表达式

AutoLISP处理的对象时符号表达式(简称表达式),相当于其他编程语言的程序语句. 1.表达式的构成 表达式由原子或表构成.原子可细分为数原子.串原子和符号原子.数或串原子的值是数或串本身,符号原子的值是赋给该符号的值.例如,5.12.5."ABC"是由单个原子构成的表达式.多数情况下,表达式以表的形式存在,(函数名[变元]……).变元的个数可以为0也可以为任意多个,这个取决于函数本身,每个参数还可以是一个表达式.表达式中,左括号后第一个元素必须为函数名. 2.表达式的前缀表示法 A

Visual LISP 第2章 数据类型、表达式和函数(4)数据的存储结构

计算机内由许多编了码的内存单元组成. 一个特定的内存单元的编号称为内存地址. 内存单元的内容可以是可以是数字也可以是另一个内存单元的地址. 内容是另一个内存单元的地址的内存单元被称为指向另一个内存单元的指针. 如果一个内存单元分为左右两部分,分别存放两个内存单元的地址,那么这个内存单元就有左右两个指针. 具有左右两个指针的内存单元称为结点.每个节点长度是12个字节,等分为左右两部分,作为左右指针,每个节点都有它的地址.AutoLISP通过这样的一些结点构成链表,以链表的方式存储各种数据. 1.符

Visual LISP 第2章 数据类型、表达式和函数(6)习题

AutoCAD 菜单实用程序已加载. 命令: COMMANDLINE 命令: (setq X 5 Y X) 5 命令: !Y 5 命令: (+ (* 2.5 2) (/ 10 3)) 8.0 命令: (setq a b b 1) 1 命令: !a nil 命令: (setq L1(list 'M' 'N')) ; 错误: 输入中含有多余的闭括号 命令: (setq L1(list 'M ' N)) (M N) 命令: (cdr L1) (N) 命令: (setq L2(cons 'X 'Y))

Visual LISP 第4章 有关Visual LISP的基本操作(4)文件操作

1.建立一个新文件 文件->新建文件 Ctr+N 2.打开已有文件 文件->打开文件 Ctr+O 3.重新打开文件 文件->重新打开文件 4.建立文件的备份 Visual LISP可自动建立自由文本编辑器加载文件的备份.实际的备份操作是在第一次保存文件时执行的.备份文件与原文件名相同,后缀以下划线"_"开头,后跟原后缀中的前两个字符. 5.在VisualLISP环境下加载AutoLISP程序 加载AutoLISP程序的目的是运行AutoLISP程序.在VisualLI

Visual LISP 第5章 编辑源程序代码(3)设置代码格式

1.设置AutoLISP代码格式的对话框 工具->环境选项->VisualLISP格式选项. 文本右边距:定义域为20-200. 窄样式向右缩进的宽度:1-6. 表达式第一个参数的长度,如果表达式的第一个参数超出该长度,则其余的参数移至下一行.不小于张样式向左缩进的宽度. 2.改变代码的格式 工具->设置编辑器中代码的格式.或者单击. 更改前: 更改后: 3.格式编排快捷菜单 Visual LISP提供了格式设置的快捷菜单.在活动的文本编辑器窗口按Ctrl+E即可弹出. 4.选取的文本输

Visual LISP 第4章 有关Visual LISP的基本操作(1)进入和退出Visual LISP

1.进入Visual LISP 工具->AutoLISP->Visual LISP编辑器.或者在命令提示中键入:vlide,便可进入Viausl LISP的用户界面. 2.退出 关闭按钮,或者文件->退出.注意,此时AutoCAD并没有将Visual LISP卸载,而只是把所有的VisualLISP窗口关闭.在下一次启动VisualLISP任务时,VisualLISP将自动打开上次退出时打开的文件盒窗口. 3.切换到AutoCAD窗口 Alt+Tab就挺好使的.Visual LISP 窗

Visual LISP 第3章 程序的流程控制盒AutoLISP文件(2)AutoLISP程序文件

1.AutoLISP文件的特点 AutoLISP文件的扩展名为".lsp",是由若干个AutoLISP表达式构成的. 虽然在“Command:”提示下,通过键入AutoLISP表达式的方法可以定义或调用LISP函数,但不便保留或调试程序,因此,通常都是以文件形式实现函数的定义和调用. 一个LISP文件可以定义多个函数或AutoCAD命令. 表达式相当于语句.一个表达式可以分写在若干行上,一行可以写若干个表达式.连续的多个空格相当于一个空格.以下是一个表达式分开写在若干行上的实例: (d

Visual LISP 第3章 程序的流程控制盒AutoLISP文件(1)程序的流程控制

AutoLISP程序的流程通过流程控制函数控制. 1.分支结构 (1)(cond(测试表达式1 结果表达式1)[(测试表达式2 结果表达式2)]……) [例] 1 (setq n( cond((<= i 1) 1) 2 ((<= i 1) 1) 3 ((<= i 2) 4) 4 ((<= i 3) 10) 5 (t 100) 6 ) 7 ) 说明:该函数类似C语言中的switch语句.最后一个测试表达式"t(或T)"相当于"default",

Visual LISP 第4章 有关Visual LISP的基本操作(3)控制台操作

1.控制台窗口与AutoCAD命令窗口的区别 (1)控制台窗口的命令提示符为"_$". (2)空格键只是空格,不再代表回车,只有按下回车键,系统才对表达式求值. (3)按Ctrl+Enter键,可以将未输入玩的表达式续写到下一行. (4)按Esc键,取消当前的输入,按Shift+Esc键,终止当前的操作,返回控制台的提示"_$". (5)查看变量值不用在变量前加惊叹号“!”. (6)在键入Enter键之前可输入多个表达式,并返回输入的每个表达式的值. (7)调用自定