养成良好的AutoLISP书写习惯
养成良好的养成良好的 AutoLISPAutoLISP 书写习惯书写习惯 众所周知,Lisp 是一种表结构语言,括号必须成对出现,在调试时往往为遗漏了一个括号大 费周折,所以,养成一个好的编程习惯是学好Lisp 所必须的。 ⑴选择一个较好的编辑器,这是一个基本条件,建议使用Visual Lisp 编辑器或 Lisplink 等专用编辑器,此类编辑器可以对函数突出显示。 ⑵按 Lisp(DCL)专有格式书写,并经常对程序进行“格式化”,及时发现语法错误,并 有利于调试是查找错误。 ⑶使用自定义函数,并辅助以适当得注释,在较大程序中按功能使用自定义函数可以使 得程序条理化。 autolispautolisp 的入门教程+的入门教程+autolispautolisp 函数函数! ! Lisp 是一门历史悠久的语言,全名叫LISt Processor,也就是“表处理语言”,它是由 John McCarthy于1958年就开始设计的一门语言。 和Lisp同时期甚至更晚出现的许多语言如Algo 等如今大多已经消亡, 又或者仅仅在一些特定的场合有一些微不足道的用途, 到现在还广为 人知的恐怕只剩下了 Fortran 和 COBOL。但唯独 Lisp,不但没有随着时间而衰退,反倒是一 次又一次的焕发出了青春,从Lisp 分支出来的 Scheme、ML 等语言在很多场合的火爆程度 甚至超过了许多老牌明星。那么这颗常青树永葆青春的奥秘究竟在哪里呢? 如果你只接触过 C/C++、 Pascal 这些“过程式语言”的话, Lisp 可能会让你觉得十分不同寻常, 首先吸引你眼球(或者说让你觉得混乱的)一定是Lisp 程序中异常多的括号,当然从现在 的角度来讲,这种设计的确对程序员不大友好,不过考虑到五六十年代的计算机处理能力, 简化语言本身的设计在那时算得上是当务之急了。 Lisp 的基本语法很简单,它甚至没有保留字(有些语言学家可能对这一点有异议,别怕,我 听你们的),它只有两种基本的数据,仅有一种基本的语法结构就是表达式,而这些表达式 同时也就是程序结构, 但是正如规则最简单的围棋却有着最为复杂的变化一样, Lisp 使用最 基本的语言结构定义却可以完成其它语言难于实现的、最复杂的功能。 废话少说,现在我们就来看看Lisp 语言中的基本元素。 Lisp 的表达式是一个原子(atom)或表(list),原子(atom)是一个字母序列,如abc;表是由零 个或多个表达式组成的序列,表达式之间用空格分隔开,放入一对括号中,如: abc () (abc xyz) (a b (c) d) 最后一个表是由四个元素构成的,其中第三个元素本身也是一个表。 正如算数表达式 1+1 有值 2 一样,Lisp 中的表达式也有值,如果表达式 e 得出值 v,我们说 e 返回 v。如果一个表达式是一个表,那么我们把表中的第一个元素叫做操作符,其余的元 素叫做自变量。 Word 资料 正如欧几里德的几何世界中有五个公理一样,我们在这里给出Lisp 世界中的 7 个公理(基 本操作符): (quote x)返回 x,我们简记为 x (atom x)当 x 是一个原子或者空表时返回原子t,否则返回空表()。在Lisp 中我们习惯用原子 t 表示真,而用空表()表示假。 (atom a) t (atom (a b c)) () (atom ()) t 现在我们有了第一个需要求出自变量值的操作符, 让我们来看看 quote 操作符的作用——通 过引用(quote)一个表,我们避免它被求值。一个未被引用的表达式作为自变量,atom 将其 视为代码,例如: (atom (atom a)) t 反之一个被引用的表仅仅被视为表 (atom (atom a)) () 引用看上去有些奇怪,因为你很难在其它语言中找到类似的概念,但正是这一特征构成了 Lisp 最为与众不同的特点——代码和数据使用相同的结构来表示, 而我们用 quote 来区分它 们。 (eq x y)当 x 和 y 的值相同或者同为空表时返回t,否则返回空表() (eq a a) t (eq a b) () (eq () ()) t 例如:我们有时想捕捉任意两点的中点,而不只是一条线上的中点,用系统自己的捕捉中点 (它要有辅助线)就不行了, 我们可以参考“捕捉虚中点.lsp”程序来实现。除程序中的语句要学外,动画中的自动找到所 有的全局变量并把它们 改为局部变量的方法很有用! 动画中先画了一个六边形, 再画一个圆与它内接, 圆心就是捕 捉虚中点! AutoLispAutoLisp 概述概述 AutoLisp 的数据类型,它有 10 种数据类型,常见的有五种: 整型INT实数型REAL符号型 SYM 字符串 STR表LISP 在 AutoLisp 中,最基本的数据类型称为符号表达式,也称为S-表达式,它是原子和点 对的总称,点对通常表示为表。 原子是一个一般符号系列, 有两种类型的原子, 一种称为数子原子 (简称“数”) , AutoLIsp Word 资料 可处理整数和实数, 其它不是“数”原子称为非数字原子, 它包括符号原子 (或称为文字原子) 和串原子。 注意:0.4 不能写成.4。 符号原子的大小写是等效的。 符号原子可以包含下列字符以外的任何可打印字符。 正反括号用于定义表 句号用于作点对 分号用于注释的开始 ‘用作 QUOTE 函数的简写 双引号用作字符串常数的定界符 符号原子的长度没有限制,且所有的字符都是有意义的,但尽量不要超过6 个字符。 约束是一对符号和值,当将一个值赋给符号时,就说符号被约束到那个值。值 (而不是 符号)决定所代表信息的类型,故一个符号可以接受任何类型的值,其初始值为nil. 在 AutoLisp 中,有两个特殊的符号原子,即T 和 nil. 字符串的个数(不包括定界符)称为字符串的长度。字符串可以是任意长度,它们的存 储空间是动态分配的,但字符串常量的最大长度不超过100,长度为 0 字符串称为空串。 可以用“\nnn”的方式表示字符,其中nnn 为八进制。 \eEsc\n换行 \r回车\t制表符(Tab 节) 点对是由一个左括号,后接一个S-表达式和空格再接一个句点和空格和一个右括号。 表是指放在一对相匹配的左右括号中的元素有序集合。 表中的项称为表的元素, 表中的 元素可以是任意类型的 S-表达式,序号 0 到 n-1。如果嵌套,0 层,1 层. 表的长度,顶层元素的个数。 只有 nil 是表(’())又是原子。 表有两种类型:标准表,引用表。 引用表是在表的前面冠以引用符号(’或 Quote)对该表不求值。 标准表:第一个元素的值必须是一个合法的已经存在的AutoLisp 函数定义,后跟调用 该函数的参数。 AutoLisp 采用”前缀表示法“即把运算符放在操作数之前, 而不是中间,并把运算符 (函数 名)和操作数(调用函数的参数)用圆括号括起来,以表的方式表示。 一个完整的 AutoLisp 程序往往是由一系列按顺序排列的S-表达式组成的。 如: (defun plus (x y) (+ ( + x y) x)) (Set