- 阿啵呲嘚
-
1、将(initget"L r")改为→(initget"L R"),注意r的大小写;
2、将(prompt “ << 7TEST2>>快速自动楼梯绘制程序”)改为→(prompt " << 7TEST2>>快速自动楼梯绘制程序"),注意双引号的中英文区别;
3、增加系统变量的保存与恢复。
整个程序如下:
(defun c:7test2a()
;储存系变量原始值
(setq cm (getvar "cmdecho")
os (getvar "osmode")
)
(setvar "cmdecho" 0) ;关闭命令行的回显
;以下 pa、ww、hh、n 值须由用户输入
(setq pa (getpoint "请求输入基准点: "))
(setq ww (getdist pa " 请求输入楼梯宽度: "))
(setq hh (getdist pa " 请求输入楼梯高度: "))
(setq n (getint " 请求输入楼梯阶数: "))
;先画出 pa ? pb ? pc
(setq aa_2 0)
(initget"L R")
(setq aa_1 (getkword "请输入方向<L或R>?: "))
(if (null aa_1) (setq aa_1 "L"))
(if(= "R" aa_1)(setq aa_2 pi))
(setq pb (polar pa aa_2 ww))
(setq pc (polar pb (/ pi 2) hh))
(setvar "osmode" 0) ;关闭对象捕捉
(command "line" pa pb pc "")
;请留意以下三行dw、dh、pp值须由程序依据ww、hh 与 n求出
(setq dw (/ ww n))
(setq dh (/ hh n))
(setq pp pa)
;以下准备进入repeat循环了
(repeat n
(setq p1 (polar pp (/ pi 2) dh))
(setq p2 (polar p1 aa_2 dw))
(command "line" pp p1 p2 "")
(setq pp p2)
)
;恢复系变量原始值
(setvar "osmode" os)
(setvar "cmdecho" cm)
(prin1)
)
(prompt " << 7TEST2>>快速自动楼梯绘制程序")
(prin1)
- 西柚不是西游
-
貌似运行起来没什么错误吧~
Lisp 值得去学习吗
一、 如果我们把流行的编程语言,以这样的顺序排列:Java、Perl、Python、Ruby。你会发现,排在越后面的语言,越像Lisp。Python模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能,也一起模仿了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。 二、 1958年,John McCarthy设计了Lisp语言。我认为,当前最新潮的编程语言,只是实现了他在1958年的设想而已。 这怎么可能呢?计算机技术的发展,不是日新月异吗?1958年的技术,怎么可能超过今天的水平呢? 让我告诉你原因。 这是因为John McCarthy本来没打算把Lisp设计成编程语言,至少不是我们现在意义上的编程语言。他的原意只是想做一种理论演算,用更简洁的方式定义图灵机。 所以,为什么上个世纪50年代的编程语言,到现在还没有过时?简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不 应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序(Quicksort)算法进行类比。这种算法是1960年提出的,至今仍然是最 快的通用排序方法。 三、 Fortran语言也是上个世纪50年代出现的,并且一直使用至今。它代表了语言设计的一种完全不同的方向。Lisp是无意中从纯理论发展 为编程语言,而Fortran从一开始就是作为编程语言设计出来的。但是,今天我们把Lisp看成高级语言,而把Fortran看成一种相当低层次的语 言。 1956年,Fortran刚诞生的时候,叫做Fortran I,与今天的Fortran语言差别极大。Fortran I实际上是汇编语言加上数学,在某些方面,还不如今天的汇编语言强大。比如,它不支持子程序,只有分支跳转结构(branch)。 Lisp和Fortran代表了编程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。从那时起,这两大方向一直在互相靠拢。 Lisp刚设计出来的时候,就很强大,接下来的二十年,它提高了自己的运行速度。而那些所谓的主流语言,把更快的运行速度作为设计的出发点,然后再用超过 四十年的时间,一步步变得更强大。 直到今天,最高级的主流语言,也只是刚刚接近Lisp的水平。虽然已经很接近了,但还是没有Lisp那样强大。 四、 Lisp语言诞生的时候,就包含了9种新思想。其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的。按照被大众接受的程度,这9种思想依次是: 1. 条件结构(即"if-then-else"结构)。现在大家都觉得这是理所当然的,但是Fortran I就没有这个结构,它只有基于底层机器指令的goto结构。 2. 函数也是一种数据类型。在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量中,也能当作参数传递。一种数据类型应该有的功能,它都有。 3. 递归。Lisp是第一种支持递归函数的高级语言。 4. 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。 5. 垃圾回收机制。 6. 程序由表达式(expression)组成。Lisp程序是一些表达式区块的集合,每个表达式都返回一个值。这与Fortran和大多数后来的语言都截然不同,它们的程序由表达式和语句(statement)组成。 区分表达式和语句,在Fortran I中是很自然的,因为它不支持语句嵌套。所以,如果你需要用数学式子计算一个值,那就只有用表达式返回这个值,没有其他语法结构可用,因为否则就无法处理这个值。 后来,新的编程语言支持区块结构(block),这种限制当然也就不存在了。但是为时已晚,表达式和语句的区分已经根深蒂固。它从Fortran扩散到Algol语言,接着又扩散到它们两者的后继语言。 7. 符号(symbol)类型。符号实际上是一种指针,指向储存在哈希表中的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符地比较。 8. 代码使用符号和常量组成的树形表示法(notation)。 9. 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码;也可以在编译期读取或运行代码;还可以在运行期读取或者编译代码。 在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法;在编译期运行代码,则是Lisp宏的工作基础;在运行期编 译代码,使得Lisp可以在Emacs这样的程序中,充当扩展语言(extension language);在运行期读取代码,使得程序之间可以用S-表达式(S-expression)通信,近来XML格式的出现使得这个概念被重新"发 明"出来了。 五、 Lisp语言刚出现的时候,它的思想与其他编程语言大相径庭。后者的设计思想主要由50年代后期的硬件决定。随着时间流逝,流行的编程语言不断更新换代,语言设计思想逐渐向Lisp靠拢。 思想1到思想5已经被广泛接受,思想6开始在主流编程语言中出现,思想7在Python语言中有所实现,不过似乎没有专用的语法。 思想8可能是最有意思的一点。它与思想9只是由于偶然原因,才成为Lisp语言的一部分,因为它们不属于John McCarthy的原始构想,是由他的学生Steve Russell自行添加的。它们从此使得Lisp看上去很古怪,但也成为了这种语言最独一无二的特点。Lisp古怪的形式,倒不是因为它的语法很古怪,而 是因为它根本没有语法,程序直接以解析树(parse tree)的形式表达出来。在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基 本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。思想8和思想9,意味着你可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。如果你想真正地理解Lisp语言,或者想拓宽你的编程视野,那么你必须学习宏。 就我所知,宏(采用Lisp语言的定义)目前仍然是Lisp独有的。一个原因是为了使用宏,你大概不得不让你的语言看上去像Lisp一样古 怪。另一个可能的原因是,如果你想为自己的语言添上这种终极武器,你从此就不能声称自己发明了新语言,只能说发明了一种Lisp的新方言。 我把这件事当作笑话说出来,但是事实就是如此。如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、 atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么在它们的基础上,你完全可以推导出Lisp语言的所有其他部分。事实上,Lisp语言 就是这样定义的,John McCarthy把语言设计成这个样子,就是为了让这种推导成为可能。 六、 就算Lisp确实代表了目前主流编程语言不断靠近的一个方向,这是否意味着你就应该用它编程呢? 如果使用一种不那么强大的语言,你又会有多少损失呢?有时不采用最尖端的技术,不也是一种明智的选择吗?这么多人使用主流编程语言,这本身不也说明那些语言有可取之处吗? 另一方面,选择哪一种编程语言,许多项目是无所谓的,反正不同的语言都能完成工作。一般来说,条件越苛刻的项目,强大的编程语言就越能发挥 作用。但是,无数的项目根本没有苛刻条件的限制。大多数的编程任务,可能只要写一些很小的程序,然后用胶水语言把这些小程序连起来就行了。你可以用自己熟 悉的编程语言,或者用对于特定项目来说有着最强大函数库的语言,来写这些小程序。如果你只是需要在Windows应用程序之间传递数据,使用Visual Basic照样能达到目的。 那么,Lisp的编程优势体现在哪里呢? 七、 语言的编程能力越强大,写出来的程序就越短(当然不是指字符数量,而是指独立的语法单位)。 代码的数量很重要,因为开发一个程序耗费的时间,主要取决于程序的长度。如果同一个软件,一种语言写出来的代码比另一种语言长三倍,这意味 着你开发它耗费的时间也会多三倍。而且即使你多雇佣人手,也无助于减少开发时间,因为当团队规模超过某个门槛时,再增加人手只会带来净损失。Fred Brooks在他的名著《人月神话》(The Mythical Man-Month)中,描述了这种现象,我的所见所闻印证了他的说法。 如果使用Lisp语言,能让程序变得多短?以Lisp和C的比较为例,我听到的大多数说法是C代码的长度是Lisp的7倍到10倍。但是最 近,New Architect杂志上有一篇介绍ITA软件公司的文章,里面说"一行Lisp代码相当于20行C代码",因为此文都是引用ITA总裁的话,所以我想这 个数字来自ITA的编程实践。 如果真是这样,那么我们可以相信这句话。ITA的软件,不仅使用Lisp语言,还同时大量使用C和C++,所以这是他们的经验谈。 根据上面的这个数字,如果你与ITA竞争,而且你使用C语言开发软件,那么ITA的开发速度将比你快20倍。如果你需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果某个新功能,它开发了三个月,那么你需要五年才能做出来。 你知道吗?上面的对比,还只是考虑到最好的情况。当我们只比较代码数量的时候,言下之意就是假设使用功能较弱的语言,也能开发出同样的软 件。但是事实上,程序员使用某种语言能做到的事情,是有极限的。如果你想用一种低层次的语言,解决一个很难的问题,那么你将会面临各种情况极其复杂、乃至 想不清楚的窘境。 所以,当我说假定你与ITA竞争,你用五年时间做出的东西,ITA在Lisp语言的帮助下只用三个月就完成了,我指的五年还是一切顺利、没有犯错误、也没有遇到太大麻烦的五年。事实上,按照大多数公司的实际情况,计划中五年完成的项目,很可能永远都不会完成。 我承认,上面的例子太极端。ITA似乎有一批非常聪明的黑客,而C语言又是一种很低层次的语言。但是,在一个高度竞争的市场中,即使开发速度只相差两三倍,也足以使得你永远处在落后的位置。2023-08-10 08:20:116
Auto cad中的LISP语言是什么?有怎样的用途?
AutoLISP语言是在普通的LISP语言基础上,又扩充了许多适用于CAD应用的功能而形成的一种程序设计语言。它是一种解释性求值语言,速度较慢,难以保密,可用任何文字编辑软件编辑,用纯文本的格式保存。AutoLISP语言中的一切成分都是以函数形式给出的,它没有语句概念或其他语法结构。执行AutoLISP程序就是执行一些函数,再调用其它函数。(setq pt1 (getpoint " 请选择圆心插入点"))。(command "CIRCLE" pt1 100);命令这个插入点绘制圆,半径为100。扩展资料:LISP语言(LISP,List Processing的缩写)是一种早期开发的、具有重大意义的表处理语言。它适用于符号处理、自动推理、硬件描述和超大规模集成电路设计等。特点是,使用表结构来表达非数值计算问题,实现技术简单。LISP语言已成为最有影响,使用十分广泛的人工智能语言。在LISP语言中,数据和函数都是采用符号表达式定义的,这种符号表达式称为S一表达式,它是原予和表的总称。原子分为符号原子和数原子。符号原子是指有限个大写字母和数字组成的字符串,其中第一个符号必须是字母。原子NIL和T分别表示逻辑假(或空表)和逻辑真。数原子是指一串数字,通过符号表示其正负。LISP语言不仅在专家系统和CAD领域有广泛的应用,在符号代数、定理证明、机器人规划等领域也有广泛的应用。影响LISP语言使用的主要原因有:一是LISP是非可视化语言;二是LISP在通用计算机上的运行效率较低;三是LISP的数值计算能力较差;四是人们对函数型语言的编程风格不习惯。参考资料来源:百度百科-lisp语言2023-08-10 08:20:441
都有什么人用lisp
程序员,闲着没事的人。2023-08-10 08:21:056
Lisp 语言优点那么多,为什么国内很少运用?
之前在学校学编程的时候,偶然间听过这种语言,还是挺意外的,毕竟在中国这种语言太冷门了。有些人估计都没听说过这种语言啊。定义首先来看下这种语言是什么?同样类似目前已经渐渐被忘记的语言还有一个就是FORTRAN。定义中的是LISP为函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现。LISP没有命令式语言程序中常见赋值语句和变量,重复的过程可以使用递归的函数调用来表示,并不需要使用循环模式。优点和缺点任何语言都有利有弊,任何语言并不能说是最好的语言。而相对与别的语言来讲,LISP语言最突出的优点就是弱类型这个优点了。LISP作为弱类型这优点相对缺点则是运行效率的低下。原始定义简洁的缺点使到大型开发工程变得困难,自底层到高层,自二维表查询到面向对象,使用者需要嵌入更多的函数来实现,致使LISP众多方言的衍生。失败的原因我认为一个语言的没落失败必定是因为他不适应这个社会的需求和发展。只有随时顺应社会人编程的需求和习惯还能更好的别使用。Lisp失败的原因是因为它的碎片化,并且它的碎片化是因为其语言天性与特定领域方案的风格造成的。而网络效应则恰恰相反。越来越少的程序员使用相同的方言,因此它相对与ALGOL语言家族的总价值下降。2023-08-10 08:22:122
Lisp是什么样的语言?
Lisp是第一个函数式程序语言,区别于C语言、Fortran等命令型程序语言和Java、C#、Objective-C等面向对象程序语言。由于历史的原因,Lisp长期以来被认为主要用于人工智能领域,但Lisp并不是只为人工智能而设计,而是一种通用的程序语言。2023-08-10 08:23:191
LISP代码是什么
你说的这是emacs lisp吧2023-08-10 08:23:301
lisp语言的快速入门
Common Lisp语言快速入门: Lisp是软件领域的分裂力量。一方面,Lisp爱好者誓言Lisp比软件领域内的其它语言都更加快捷、整洁和强大;而反对者则辩称,不可靠的执行和库支持不足使得开发者难以在其中编写任何真正的软件。事实上,他们都有各自的道理。第一版Lisp于大约50年前推出,这使得它和FORTRAN一样,成为现在仍在使用的最古老的编程语言之一。可以证明,它拥有(它们将会拥有)最庞大的特性列表,它也是第一种包括一整套今天我们全都认为是标准语言特性的语言,如垃圾收集、递归、函数作为对象、甚至是普通的if-then-else子句。同时,人们也认为它是一款优秀的教学语言:MIT使用方案、Lisp衍生物,传授它们的介绍性编程类。我们将一起学习最强大和项目就绪的Lisp版本:Common Lisp,使其正常运行,并了解一些Lisp应用。 代码和数据并无差异——在Lisp中,代码只是一个函数对象列表。源代码和数据源之间不存在区别,允许Lisp把它的内在呈现给编译器、注释器和程序员。这允许你方便地本地读入和评估代码,甚至可以允许你使用宏。宏——定义和重新定义任何语言元素。不喜欢条件、或循环或函数的运行方式吗?好,你可以定义自己的注释。如果你在代码中多次执行某个特定的任务,把那个特性添加到语言中不是更加方便吗?应用Lisp,你可以实现上述功能。速度——虽然在许多情况下Common Lisp不如C或OCaml这类速度巨人快捷,但它在一系列测试中表现良好,特别是在执行一小段程序的情况下。了解一些基本的编译器知识,你就能够编写出处理列表和大型数字的代码,在执行速度和内存使用方面都要优于其它语言。简化——Lisp的一切功能都基于一些基本的理念——一旦你了解那些理念,你就几乎能够处理任何问题。Lisp程序员常常自夸说,仅仅用几百行代码,你就能在几乎任何语言(如C++或Haskell)中执行一个Lisp注释器。灵活——以你喜欢的任何方式编写代码。更喜欢功能性的编程方法吗?没问题!想要完全反复编程吗?草草写下几个快速的宏就可以完成任务。你可以用最方便最高效的方式编写程序,而且这些程序都能良好地运行。 好,行!我选择了Lisp,我如何进行安装呢?这是棘手的问题。不像是Python或C#一样,Common Lisp没有标准执行——该语言由一个规范,而不是执行来定义。Common Lisp也没有C语言的特点,及在每一个平台上都是一种支配性的执行或流行的执行。每个版本都应执行上述标准,但有一些细节要由编译器或注释器来处理,这使得每个执行都稍有不同。你可以使用几种选项——在本文中我使用CLISP,它在Windows、Linux和Mac(仅PPC)上运行良好。如果你使用英特尔Mac,则必须使用其它执行,如Allegro Common Lisp或SBCL。对于这篇快速入门中的简单例子,你使用哪个执行都不要紧。使用Lispbox可以快速安装Common Lisp系统,但遗憾的是,Lispbox在2012年停止了更新。Lispbox为你提供一个Common Lisp执行、Emacs、SBCL和Slime——Emacs高级Lisp整合模式,许多Lisp程序员会告诉你说,这个组合是使用Lisp的唯一方法。如果你并非Emacs用户(我本人也和你一样),不要担心,它并非必要条件,只是使得编写Common Lisp程序更加简便。而如果想要使用最新的Emacs、SBCL和Slime,网络上也有许多教程关于如何配置它们。安装过程因平台而异,在Windows中你只能运行安装程序,多数Linux软件包管理器提供安装包等。选择一个执行并遵循安装指令即可。打开Common Lisp (CLisp)交互环境的方式是M-x slime,如果你不理解这是什么意思的话可以通过Ctrl+h松开后按t来学习Emacs的基本操作。但由于Emacs的默认字体不支持中文,所以为了避免教程乱码,点击程序窗口左上角的Options,选择Set Default Font,选择支持中文的字体后保存。打开REPL(交互式提示符)之后再返回这里,我们继续往后讲。 REPL代表“阅读-评估-打印-循环”(Read-Evaluate-Print-Loop),它简单表示注释器的一个交互式提示符。你可以从这里输出一些简单的Lisp代码。如果你使用另一种注释器提示符,你可以在这里使用提示符作为计算器输出一些基本的数学表达式——但它不能正常运行。在CLISP中输入5*2不会返回任何有意义的结果:> 5 * 25> 55> 22Lisp并非以那种方式运行,运算符,如“+”不是在数字之间,而是在数字前面,就好像它们是函数名称一样。因此,如果你想将REPL当作计算器使用,你必须输入:> (* 5 2)10> (+ 1 2 3 4)10> (+ (* 5 2) (* 10 3) (/ 100 4))65对你来说,理解这种用法可能更难一些,但它拥有一些优势:它便于编译器解析、它对所有函数和运算符都一样、它让你给函数添加尽可能多的自变量——例如,在上面的第二个例子中,你可以任意扩充加数,使得加法函数和总计函数完全一样。另外你会注意到,函数名在括号内,而不像许多其它语言一样函数名在括号以外。这表示你要写(函数自变量)而不是函数(自变量)。每个Lisp表达式会返回一个值,一个函数总是返回最后一个表达式的结果——即使是NIL,NULL在Java或C++中的对等值也是这样。因此在Lisp中显示“Hello World”相当简单:> Hello WorldHello World如果你希望在屏幕上打印一些内容,并返回其它内容,你应该使用打印函数:> (print Hello World)Hello WorldHello World这个字符串显示两次,一个是打印结果,一个是函数返回的结果。Lisp表示LIST Processor(列表处理器),Lisp中的几乎所有内容都以列表的形式存在,因此有时你必须处理列表。定义列表非常容易:> (list 1 2 3 4 5)(1 2 3 4 5)> "(1 2 3 4 5)(1 2 3 4 5)第二种定义方法叫做引用,除定义简单的列表外,它还有更多用途,不过我们必须在后面的另一篇文章中讨论那个主题。 Lisp拥有全部标准控制流程方法。定义一个重复一个值的简单循环相当容易:> (dotimes (i 10) (print i))0123456789NIL同样,重复一个列表也很简单:> (dolist (i "(0 1 2 3 4 5 6 7 8 9)) (print i))0123456789NIL以上两个函数都是DO函数的特殊版本,它就像在其它语言中组合使用while和for函数一样。它由三个部分组成:循环变更定义、终止条件和语句主体:> (do ((i 0 (+ 1 i))) ((> i 10)) (print i))012345678910NIL在这个例子中,变更定义部分为((i 0 (+ 1 i))),它定义变量i为0,并在每次循环时调用函数(+ 1 0)。终止条件为((> i 10)),表示在i大于10时函数终止运行。最后主体部分打印i的值。Lisp中也有条件函数,最基本的条件函数为if函数:> (if (> 10 20) (print Hello) (print World))WorldWorldif函数由三部分组成:条件、then语句和else语句。如果条件为真,则执行then语句,否则就执行else语句。你可能已经注意到,到现在为止我们仅使用了单个的语句——但如果你需要把几个语句连接在一起,那该怎么办呢?在Lisp中,要将几个语句连接起来,你需要使用progn这个特殊的控制流程函数:> (progn (print Hello) (print World))HelloWorldWorld例如,上例允许你在条件函数和循环中使用几个语句。如果你想要更进一步的了解和学习Common Lisp,可以搭配学习ANSI Common Lisp 和Practical Common Lisp (实用Common Lisp编程),如果你想再更进一步,可以看一看On Lisp 等参考书。2023-08-10 08:23:401
LISP的语言特点
LISP为函数式程序设计语言,所有运算都能以函数作用于参数的方式来实现。 LISP没有命令式语言程序中常见赋值语句和变量,重复的过程可以使用递归的函数调用来表示,并不需要使用循环模式。 LISP是古老的函数语言、弱类型、动态推断,其代码本身就是各种列表。每一个表项均可以储存任何类型的数据如数字、函数、符号或一个子表等,在编码时,可以随时操作以更新列表。 LISP核心的操作符只有7个操作符:quote、atom、eq、car、cdr、cons、cond。前三者quote、atom、eq用于符号的推断;car、cdr、cons操纵表格;cond负责分支判断。这种简洁定义,非常接近图灵机原型的纯函数式语言,是现代语言完全无法比拟的。 LISP作为弱类型这优点相对缺点则是运行效率的低下。原始定义简洁的缺点使到大型开发工程变得困难,自底层到高层,自二维表查询到面向对象,使用者需要嵌入更多的函数来实现,致使LISP众多方言的衍生。2023-08-10 08:23:561
lisp语言的介绍
Lisp 语言最早是在 20 世纪 50 年代末由麻省理工学院(MIT)为研究人工智能而开发的。Lisp 语言的强大使它在其它方面诸如编写编辑命令和集成环境等显示其优势。而 GNU Emacs Lisp 主要由 Maclisp 发展而来,该语言由 MIT 在 20 世纪 60 年代写成。它在某种程度上继承了 Common Lisp,而 Common Lisp 在 20 世纪 80 年代成了一种标准。 Lisp 代表 LISt Processing,即表处理,这种编程语言用来处理由括号(即“(”和“)”)构成的列表。2023-08-10 08:24:101
学习Lisp如何入门?
LISP是一种通用高级计算机程序语言,长期以来垄断人工智能领域的应用。LISP作为因应人工智能而设计的语言,是第一个函数式程序设计语言,有别于C、Fortran等命令式程序设计语言和Java、C#等面向对象语言。LISP名称源自列表处理(LISt Processing)的英语缩写,由来自麻省理工学院的人工智能研究先驱约翰·麦卡锡(John McCarthy)在1958年基于λ演算所创造,采用抽象数据列表与递归作符号演算来衍生人工智能。1960年4月,McCarthy以《递回函数的符号表达式以及由机器运算的方式,第一部》为题,于ACM通讯上发表LISP设置。McCarthy的学生Steve Russell根据该论文,以IBM 704于麻省理工学院的计算机运算文中心成功执行了第一版的LISP。 1962年,McCarthy及人工智能小组按LISP 1的编译基础上改良出LISP 1.5版本。 1969年9月,史丹福大学人工智能实验室的Lynn Quam与Whitfield Diffie推出的Stanford LISP 1.6广泛地应用于使用TOPS-10系统的PDP-10计算机系中。Stanford LISP 1.6版本自麻省理工智能项目更新LISP 1.5成MACLISP及BBN科技公司推出的InterLisp成功后,渐被弃置。 自1960代末年至1980年初年,各种更新LISP版本涌现,有源自加大伯克来分校的Franz Lisp、在AutoCAD运行的AutoLISP前身XLISP、犹他大学开展的Standard Lisp及Portable Standard Lisp、专属于Lisp机器上运行的ZetaLisp、源自法国国家信息与自动化研究所的LeLisp、以及MIT人工智能实验室的Gerald Sussman与Guy Steele所开发的Scheme等。 1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。 自稳定运行的Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自欧洲用户的EuLisp及自由开源的IsLisp,ACL2等2023-08-10 08:24:383
CAD LISP 是什么
AutoLISP 应用程序源代码可以执行的一种CAD程序2023-08-10 08:24:483
lisp 可以做什么
比较常见的是与cad的二次开发用 就目前自己使用的感觉来说 数字 字符串等数据处理不如主流语言好用 胜在与cad结合很好2023-08-10 08:24:583
LISP的发展历程
1960年4月,麦卡锡以《递回函数的符号表达式以及由机器运算的方式,第一部》为题,于ACM通讯上发表LISP设置。麦卡锡的学生Steve Russell根据该论文,以IBM 704于麻省理工学院的计算机运算中心成功执行了第一版的LISP。 1962年,麦卡锡及人工智能小组按LISP 1的编译基础上改良出LISP 1.5版本。 1969年9月,史丹福大学人工智能实验室的Lynn Quam与Whitfield Diffie推出的Stanford LISP 1.6广泛地被应用于使用TOPS-10系统的PDP-10计算机系中。可是,Stanford LISP 1.6版本自麻省理工智能项目更新LISP 1.5成MACLISP及BBN科技公司推出的InterLisp成功后,渐被弃置。 自1960代末年至1980年初年,各种更新LISP版本涌现,有源自加利福尼亚大学伯克利分校的Franz Lisp、在AutoCAD运行的AutoLISP前身XLISP、犹他大学开展的Standard Lisp及Portable Standard Lisp、专属于Lisp机器上运行的ZetaLisp、源自法国国家信息与自动化研究所的LeLisp、以及MIT人工智能实验室的Gerald Sussman与Guy Steele所开发的Scheme等。 1984年,改良自MacLisp、集各版本大成、跨平台、且被目为事实标准的Common Lisp诞生。至1994年,美国国家标准学会(ANSI)对Common Lisp语言进行了标准化。 自稳定运行的Common Lisp出现起,再有各机构按各自所需而开展后续Lisp,包括1990年来自欧洲用户的EuLisp、运行于Java虚拟机的Clojure、受到Maclisp影响而创的Emacs Lisp、以及自由开源来自卡内基·梅隆大学的CMUCL、还有IsLisp,Racket,ACL2等蓬勃涌现。 自2000年起,LISP共享者合力支援的自由开源社区逐渐形成,致力于LISP后续发展。 2002年10月,第一届国际LISP会议于美国旧金山开展,其后LISP大会不定期于全球各地举行,包括2014年在加拿大蒙特利尔大学以移动概念作主题的会议。2023-08-10 08:25:071
lisp语言的定义
约翰麦卡锡定义lisp当然早已有了各种计算模型--最著名的是图灵机. 但是图灵机程序难以读懂. 如果你要一种描述算法的语言,你可能需要更抽象的,而这就是约翰麦卡锡定义 Lisp的目标之一.约翰麦卡锡于1960年定义的语言还缺不少东西. 它没有副作用,没有连续执行 (它得和副作用在一起才有用),没有实际可用的数,[4] 没有动态可视域. 但这些限制可以令人惊讶地用极少的额外代码来补救. Steele和Sussman在一篇叫做``解释器的艺术""的著名论文中描述了如何做到这点.[5]如果你理解了约翰麦卡锡的eval,那你就不仅仅是理解了程序语言历史中的一个阶段. 这些思想至今仍是Lisp的语义核心. 所以从某种意义上,学习约翰麦卡锡的原著向我们展示了Lisp究竟是什么. 与其说Lisp是麦卡锡的设计,不如说是他的发现. 它不是生来就是一门用于人工智能,快速原型开发或同等层次任务的语言. 它是你试图公理化计算的结果(之一).随着时间的推移,中级语言,即被中间层程序员使用的语言,正一致地向Lisp靠近. 因此通过理解eval你正在明白将来的主流计算模式会是什么样.注释把约翰麦卡锡的记号翻译为代码的过程中我尽可能地少做改动. 我有过让代码更容易阅读的念头,但是我还是想保持原汁原味.在约翰麦卡锡的论文中,假用f来表示,而不是空表. 我用空表表示假以使例子能在Common Lisp中运行. (fixme)我略过了构造dotted pairs,因为你不需要它来理解eval. 我也没有提apply,虽然是apply(它的早期形式,主要作用是引用自变量),被约翰麦卡锡在1960年称为普遍函数,eval只是不过是被apply调用的子程序来完成所有的工作.我定义了list和cxr等作为简记法因为麦卡锡就是这么做的. 实际上 cxr等可以被定义为普通的函数. List也可以这样,如果我们修改eval,这很容易做到,让函数可以接受任意数目的自变量.麦卡锡的论文中只有五个原始操作符. 他使用了cond和quote,但可能把它们作为他的元语言的一部分. 同样他也没有定义逻辑操作符and和not,这不是个问题,因为它们可以被定义成合适的函数.在eval.的定义中我们调用了其它函数如pair.和assoc.,但任何我们用原始操作符定义的函数调用都可以用eval.来代替. 即(assoc. (car e) a)能写成(eval. "((label assoc.(lambda (x y)(cond ((eq (caar y) x) (cadar y))("t (assoc. x (cdr y))))))(car e)a)(cons (list "e e) (cons (list "a a) a)))麦卡锡的eval有一个错误. 第16行是(相当于)(evlis. (cdr e) a)而不是(cdr e),这使得自变量在一个有名函数的调用中被求值两次. 这显示当论文发表的时候,eval的这种描述还没有用IBM 704机器语言实现. 它还证明了如果不去运行程序,要保证不管多短的程序的正确性是多么困难.我还在麦卡锡的论文中碰到一个问题. 在定义了eval之后,他继续给出了一些更高级的函数--接受其它函数作为自变量的函数. 他定义了maplist:(label maplist(lambda (x f)(cond ((null x) "())("t (cons (f x) (maplist (cdr x) f))))))然后用它写了一个做微分的简单函数diff. 但是diff传给maplist一个用x做参数的函数,对它的引用被maplist中的参数x所捕获.[6]这是关于动态可视域危险性的雄辩证据,即使是最早的更高级函数的例子也因为它而出错. 可能麦卡锡在1960年还没有充分意识到动态可视域的含意. 动态可视域令人惊异地在Lisp实现中存在了相当长的时间--直到Sussman和Steele于 1975年开发了Scheme. 词法可视域没使eval的定义复杂多少,却使编译器更难写了.About this documentAbout this document ... This document was generated using the LaTeX2HTML translator Version 2K.1beta (1.48)Copyright © 1993,1994,1995,1996,Nikos Drakos,Computer Based Learning Unit,University of Leeds.Copyright © 1997,1998,1999,Ross Moore,Mathematics Department,Macquarie University,Sydney.The command line arguments were:latex2html -split=0 roots_of_lisp.texThe translation was initiated by Dai Yuwen on 2003-10-24 [1]欧几里德对几何的贡献.``Recursive Functions of Symbolic Expressions and Their Computation by Machine,Part1."" Communication of the ACM 3:4,April 1960,pp. 184-195.[2]当表达式以七个原始操作符中的五个开头时,它的自变量总是要求值的.[3]以另外两个操作符quote和cond开头的表达式以不同的方式求值. 当 quote表达式求值时,它的自变量不被求值,而是作为整个表达式的值返回. 在 一个正确的cond表达式中,只有L形路径上的子表达式会被求值.[4]逻辑上我们不需要为了这定义一个新的记号. 在现有的记号中用 一个叫做Y组合器的函数上的函数,我们可以定义递归函数. 可能麦卡锡在写 这篇论文的时候还不知道Y组合器; 无论如何,label可读性更强.没有实际可用的数,在麦卡锡的1960 年的Lisp中,做算术是可能的,比如用一个有n个原子的表表示数n.... 的艺术""的著名论文中描述了如何做到这点.5Guy Lewis Steele,Jr. and Gerald Jay Sussman,``The Art of the Interpreter,or the Modularity Complex(Parts Zero,One,and Two),"" MIT AL Lab Memo 453,May 1978.... 对它的引用被maplist中的参数x所捕获.6当代的Lisp程序 员在这儿会用mapcar代替maplist. 这个例子解开了一个谜团: maplist为什 么会在Common Lisp中. 它是最早的映射函数,mapcar是后来增加的.2023-08-10 08:25:231
Lisp编程:为什么人工智能很多要用lisp呢?
我认为是历史原因造成的,人工智能需要的是解释性语言,在人工智能开始研究的时候,只有lisp一个是解释性语言,什么java,python都还没发明,用着用着就成习惯了,但目前lisp并不是最好的选择(开发效率太次),美国的火星探测器的程序都是java的~~~。如果要类比,你看书店里大部分数据结构的书都喜欢用C来描述,而不是python或者java或者C#,也是这个道理。因为在我看来,语言就是个工具,基本的逻辑有了,干嘛都行,现成的东西多的语言肯定是首选,成本啊,同学2023-08-10 08:25:394
CAD里面的lisp有什么作用啊,怎么用,要具体的,能让我明白加分
AutoCAD只是提供了基本功能,同时提供了二次开发编程接口,可以加载autolisp程序。比较有名的【天正】插件,AutoCAD加载以后,提供各种功能,提高了绘图功能。由于天正越来越完善,越来越多的设计院使用天正来绘制图形。当然,这个编程可以自己写,Autodesk公司提供了autolisp函数,格式简单,很容易学会。autolisp编程有名的教材是【AutoCAD程序设计魔法书 [AutoLISP DCL基础篇]】,把里面的内容看完,基本上会写程序。总的讲,要想提高工作效率,一定要学会使用autolisp插件。可能的话,学会编写程序。2023-08-10 08:25:493
LISP的介绍
由阿澄佳奈、片冈あづさ及原纱友里三位美少女所组成的超至近距离声优团体【LISP】。2010年10月27日以数位单曲在日本出道。2023-08-10 08:25:571
如何编写lisp
用cad的visual lisp编辑器编写,或者用txt编写代码并将txt文档另存为.lsp文件。打开cad,工具->加载应用程序....->在弹出的对话框中选择.lsp文件程序加载后,输入命令运行lsp。这里的命令是代码里面自己设计的命令。我这里有简单的入门资料,需要的话给我发邮件 sepsnow@126.com2023-08-10 08:26:141
lisp程序图元选取问题
一般有两个方案第一个方案:用AutoLisp方案,首先用 取得图块这个图元,然后用 entnext 逐一找到属性块来找到其中length的属性,然后将它的值给找出来,然后进行运算,注意 entnext 的运用。这个很简单,你自己应该写吧。第二个方案:用VisualLisp方案,注意vla-getattributes,vlax-variant-value,vlax-safeArray->list这几个函数的运用,以下为 VisualLisp的例子(Defun C:Test () (setq en0 (car (entsel))) ;;此处请选有属性定义的图块 (setq vn0 (vlax-ename->vla-object en0)) (setq lstVar (vla-getattributes vn0)) (setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar))) (setq TextString nil) (foreach attr lstAttrs (setq TagString (vla-get-TagString attr)) (if (equal TagString "length") ;此处为你想要的元素 (setq TextString (vla-get-TextString attr)) ) ) (if TextString (princ (strcat "The content of length = " TextString)) (princ "没有找到length ") ) (prin1))2023-08-10 08:26:411
cadlisp二次开发实例?
AutoCAD的二次开发主要涉及以下内容:(1)编写各种用户自定义函数并形成若干LISP、ARX、VLX或ADS文件,以及一些DCL文件。(2)建立符合自己要求的菜单文件,一般可在AutoCAD原菜单文件内添加自己的内容,对于AutoCAD2000版本还可增加部分菜单文件,然后经交互方式加入到系统中去。(3)在系统的ACAD.LSP或类似文件中加入某些内容以便进行各种初始化操作,如在启动时立即装入一些文件等。(4)通过系统对话框设置某些路径。这些操作在程序开发成功后向其它AutoCAD系统上安装应用,特别是需要大批安装时,需要进行很多文件检索、内容增删、子目录创建、文件拷贝、系统设置等繁琐工作,如能令上述工作全部自动进行,使整个二次开发程序在无人干预的情况下嵌入系统,将大大提高工作效率。AutoCAD荣登全球绘图软件的龙头宝座,主要是因为它具有开放的体系结构。它允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求。AutoCAD第一版于1982年11月由AutoDESK公司推出,目前大家广泛使用的是AutoCAD2000或2002,最新版本是AutoCAD2004,其二次开发语言及工具也在不断地涌现1AutoLISPAutoLISP的全名是LISTProcessingLanguage,她出现于1985年推出的AutoCADR2.18中,是一种嵌入在AutoCAD内部的编程语言,是LISP原版的一个子集,她一直是低版本AutoCAD的首选编程语言。它是一种表处理语言,是被解释执行的,任何一个语句键入后就能马上执行,它对于交互式的程序开发非常方便。其缺点是继承了LISP语言的编程规则而导致繁多的括号。3ADSADS的全名是AutoCADDevelopmentSystem,它是AutoCAD的C语言开发系统,ADS本质上是一组可以用C语言编写AutoCAD应用程序的头文件和目标库,它直接利用用户熟悉的各种流行的C语言编译器,将应用程序编译成可执行的文件在AutoCAD环境下运行,这种可以在AutoCAD环境中直接运行的可执行文件叫做ADS应用程序。ADS由于其速度快,又采用结构化的编程体系,因而很适合于高强度的数据处理,如二次开发的机械设计CAD、工程分析CAD、建筑结构CAD、土木工程CAD、化学工程CAD、电气工程CAD等。4ObjectARXObjectARX是一种崭新的开发AutoCAD应用程序的工具,她以C++为编程语言,采用先进的面向对象的编程原理,提供可与AutoCAD直接交互的开发环境,能使用户方便快捷地开发出高效简洁的AutoCAD应用程序。ObjectARX并没有包含在AutoCAD中,可在AutoDESK公司网站中去下载,其最新版本是ObjectARXforAutoCAD2000,它能够对AutoCAD的所有事务进行完整的、先进的、面向对象的设计与开发,并且开发的应用程序速度更快、集成度更高、稳定性更强。ObjectARX从本质上讲,是一种特定的C++编程环境,她包括一组动态链接库(DLL),这些库与AutoCAD在同一地址空间运行并能直接利用AutoCAD核心数据结构和代码,库中包含一组通用工具,使得二次开发者可以充分利用AutoCAD的开放结构,直接访问AutoCAD数据库结构、图形系统以及CAD几何造型核心,以便能在运行期间实时扩展AutoCAD的功能,创建能全面享受AutoCAD固有命令的新命令。ObjectARX的核心是两组关键的API,即AcDb(AutoCAD数据库)和AcEd(AutoCAD编译器),另外还有其它的一些重要库组件,如AcRX(AutoCAD实时扩展)、AcGi(AutoCAD图形接口)、AcGe(AutoCAD几何库)、ADSRX(AutoCAD开发系统实时扩展)。ObjectARX还可以按需要加载应用程序;使用ObjectARX进行应用开发还可以在同一水平上与Windows系统集成,并与其它Windows应用程序实现交互操作。5VisualLISPVisualLISP已经被完整地集成到AutoCAD2000中,她为开发者提供了崭新的、增强的集成开发环境,一改过去在AutoCAD中内嵌AtuoLISP运行引擎的机制,这样开发者可以直接使用AutoCAD中的对象和反应器,进行更底层的开发。其特点为自身是AutoCAD2000中默认的代码编辑工具;用它开发AutoLISP程序的时间被大大地缩短,原始代码能被保密,以防盗版和被更改;能帮助大家使用ActiveX对象及其事件;使用了流行的有色代码编辑器和完善的调试工具,使大家很容易创建和分析LISP程序的运行情况。在VisualLISP中新增了一些函数:如基于AutoLISP的ActiveX/COM自动化操作接口;用于执行基于AutoCAD内部事件的LISP程序的对象反应器;新增了能够对操作系统文件进行操作的函数。6VBAVBA即Mcrosoftoffice中的VisualBasicforApplications,它被集成到AutoCAD2000中。VBA为开发者提供了一种新的选择,也为用户访问AutoCAD2000中丰富的技术框架打开一条新的通道。VBA和AutoCAD2000中强大的ActiveX自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动。2023-08-10 08:26:501
怎么在启动CAD时自动加载Lisp的工具和插件
添加到CAD加载程序对话框界面里的【内容】--启动组2023-08-10 08:26:593
怎么能将Lisp代码编译成EXE文件??
编译lisp源代码的时候要写一段说明放在源代码后面让编译器知道想要做什么。 源代码,目的是使用 f 12 23 22这样的命令求出12 23 22这三个数字的阶乘。 =============================== (defun main (&rest args) (defun factorial (n) (if (= n 0) 1 (* n (factorial (- n 1))) ) ) (loop for i in *args* do (print (factorial (parse-integer i)))) (quit)) (EXT:SAVEINITMEM "f" :QUIET t :INIT-FUNCTION "main :EXECUTABLE t :NORC t) =============================== 保存在文件a.txt里面,然后运行命令 $ clisp a.txt 就编译好了。这里面有个小幽默。一开始把“EXT”那一段放在了main函数前面,经过在lisp环境调试,发现如果把这个文件load两遍就能够编译出正确结果,load一遍就不行,load三遍四遍啥的都没问题。我感觉到超级奇怪。过了很久才明白过来。这样编译出来的是巨大的可执行文件,在文件里lisp把自己也放进去了。 如果要编译纯粹的lisp目标代码,执行起来就没这么痛快了,但是文件会小很多。 那个时候删掉(EXT)那一段,用命令 $ clisp -c a.txt 即可。2023-08-10 08:27:093
Lisp 和 Haskell 各有什么优缺点?学哪个好
思维方式而言,两者相差并不多。考虑到函数式编程并不是如今程序开发的主流,无论是 Lisp 还是 Haskell,它们和主流工程实践都相差很多。但具体到函数式程序设计语言之间,基本的思路是类似的。函数式程序设计的风格的实质:去除赋值的副作用,自包含上下文的高阶函数,以「值」的流动而不是操作的变化为中心设计程序,这在两门语言中都是一样的。当然,在细节上两门语言仍然有区别:Lisp 的宏展开,弱类型/动态类型,Haskell 的惰性求值,强类型,都有各自的区别。具体开始使用时,需要注意其特性才能用好。在社区上,Lisp 有固定的社区,但由于大量 Lisp 方言的存在,导致如今的分裂得很厉害。除了 Common Lisp 这个大型社区外,还有各种小型 Lisp 社区,星罗棋布。这使得 Lisp 社区事实上很难形成合力做出一个各个方言通用的平台——是的,即使 Common Lisp 是最大的社区,从源流上看,它也依然是方言之一。我必须承认,这一点上 Haskell 要好得太多。Haskell 的社区通过 http://www.haskell.org 很好地被统一在一起,无论是教学还是开发,都容易集合整个社区的力量。谈到工程领域,至少目前为止,Haskell 社区在宣传时一直是将其定位为一门通用程序设计语言的。但恕我直言,现在这个社区还没有找到真正适合自己的工作场景,或者说,这个社区的成熟程度还不足以支撑一个适合自己的工作场景。在我的眼里,这个社区的核心,仍然是一门玩具语言。反观 Lisp 社区,他们的应用场景简单而专注:符号推演和人工智能;与此同时,许多 Lisp 方言也将自己的触角伸进实际工程领域,配合其他语言使用。也有 Emacs 和 Gimp 这样各自领域内公认的通用软件。2023-08-10 08:27:171
LISP提示错误“输入的列表有缺陷”
(defun c:txy( / xc yc r n m id ) (defun getdata() (setq xc(atof(get_tile "X"))) (setq yc(atof(get_tile "Y"))) (setq r(atof(get_tile "R"))) (setq n(atof(get_tile "N"))) (setq m(atof(get_tile "M"))) )(setq sdt 0) (setq id(load_dialog "C:\Users\daili\Desktop\CAD\tongxinyuan.dcl")) (if (< id 0)(exit)) (setq xc 50 yc 50 r 5 n 10 m 5) (if (not (new_dialog "txy" id))(exit)) (set_tile "X" (rtos xc 2 2)) (set_tile "Y" (rtos yc 2 2)) (set_tile "R" (rtos r 2 2)) (set_tile "N" (rtos n 2 2)) (set_tile "M" (rtos m 2 2)) (action_tile "accept" "(getdata) (done_dialog 1)") (action_tile "cancel" "(done_dialog -1)") (setq sdt (start_dialog)) (unload_dialog id) (if (> sdt 0) (Repeat n (Command "circle" (list xc yc) r) (Setq r (+ r m)) ) (princ) ))没什么问题 最后一个括号没有用美式用的是中式 另外最后再补一个括号就好了 上面是我改好的 只要是列表有缺陷 你就查括号有没有少或者不对 用一个专门的代码编辑器吧 比较容易看出括号形式或数量不对求采纳为满意回答。2023-08-10 08:27:511
C语言能做人工智能吗?
分类: 电脑/网络 >> 程序设计 >> 其他编程语言 问题描述: C语言能做人工智能吗? 解析: 理论上讲是在于算法 但在具体的实现上,同一问题用不同的语言解决的时候的算法设计是有区别的,即使实现了,那在效率也是有差别的 据我所知,LISP是人工智能程序语言(很少听说听C做人工智能的)标题:LISP人工智能程序语言 内容: LISP的由来 LISP是一种计算机的表处理语言,是函数型语言。它是LIST Processing 的缩写,是研究人工智能的有力工具。 LISP最初是作为书写字符与表的递归函数的形式系统出现的,1958年由美国麻省理工学院(MIT)的AI小组提出(要为问答系统设计一种语言),1960年由MIT的John.McCarthy教授(麦卡西教授,举世闻名的计算机科学家,图灵奖获得者,后为美国斯坦福大学教授)整理成统称为LISP1.0的形式发表,然后开始流行于AI界.以后陆续出现了LISP1.5(1962年),LISP1.6,MACLISP,INTERLISP,COMMONLISP,GCLISP,CCLISP等等变种。商业中一般认Berkeley(加洲大学)的LISP1.5为规范,但以目前的发展看,COMMON LISP将成为一种标准,有统一各种LISP “方言”的趋势。在众多不同版本的流行LISP语言中,使用最广泛的是INTER LISP(XEROX公司开发),MACLISP(麻省理工学院开发)和COMMON LISP。LISP是继FORTRAN(FORTRAN是1954年提出,1956年开始使用)之后出现的第二个古老的(1958年提出,1960年开始使用)计算机高级语言,至今使用近四十年仍受重视,并为人工智能的发展作出了不可磨灭的贡献.由此可见LISP是一门历史悠久,用途广泛,功能极强,生命力极强的人工智能程序设计语言。 LISP语言一般为解释型语言(即由解释程序边解释边执行),但也有了编译型的LISP语言,并已经有了专用的LISP机。例如,编译型的LISP语言SCHEME诞生于麻省理工学院,1984年由美国15个大学和公司共同提供了被广泛接受的SCHEME标准。德克萨斯仪器公司于1985年在IBM PC机上实现了称为PC SCHEME的语言。PC SCHEME的中文版由南京大学和武汉大学联合开发,可在640KB以上的PC机上在CCDOS和MSDOS下运行并可访问其它DOS程序。 LISP语言的主要特点(优点) (1) LISP具有和图灵机相同的(也就是理论上最高的)计算能力; 在计算机科学的可计算理论中,人们已经证明递归函数和图灵机具有相同的(也就是理论上最高的)计算能力,通常指的是自然数集上的递归函数。这个结论对符号集上的递归函数也成立。J.McCarthy在LISP中设计了一套符号处理函数,它们具有符号集上的递归函数的计算能力,因此原则上可以解决人工智能中的任何符号处理问题。 (2)数据类型的唯一性,程序与数据的一致性; LISP的数据类型和句法结构简单,甚至简单到具有唯一性和一致性:其数据和程序的表现形式是一样的, 都是用S-表达式一种形式.基本的数据结构是表(表是S-表达式的特例)。 (3)数据和程序的 等价性; LISP的数据和程序不仅类型一致,而且作用也等价; 即:程序可作为数据被处理,数据也可作为程序来执行。 (4)LISP一切功能由函数来实现,程序的运行就是求值; LISP程序的通常形式是一串函数定义,其后跟着一串带有参数的函数调用,函数之间的关系只是在调用执行时才体现出来。 (5)LISP语言的控制结构以递归为主; 大多数语言使用的控制结构是以循环为主的,有的程序语言允许递归,而LISP以递归形式为主。递归是LISP能力的源泉。当然现在LISP也有循环结构和迭代。 (6)原子可以有任意多个值(特性值); LISP非常重要的一个特点是每个文字原子可以加许多特性,每个特性有一个特性表及对应的特性值。由于原子的多值性给使用者带来很多方便,给问题表示带来好处,使LISP很好用。 (7)LISP具有表的结构形式和规模的灵活性,不必预先设定; (8)具有收集无用单元的功能。 LISP语言的主要缺点 (1)初学者不容易习惯LISP的句法结构,特别是多层表的括号配对写法; (2)数据类型少(常用的只有表和原子),使其表达能力受限; (3)规范性差(无标准版本,不同的LISP文本间差别较大); (4)程序的可读性不及一般的高级语言; (5)执行速度慢。 LISP执行速度慢的原因有几个:(1)一般的 LISP是解释型, 程序边解释边执行当然比编译型慢;(2)LISP的控制结构主要是递归, 递归费时间费空间;(3)内存空间动态变化。LISP不要求用户在程序 中写一些用来指示内存分配的说明语句,全部内存必须动态的分配,直到 没有空间时才开始收集无用单元。2023-08-10 08:28:281
用简单lisp程序编制
(defun c:zfx(/ A ANG p1 p2 p3 p4 p5 os cmd) (SETQ CMD (GETVAR "cmdecho")) (SETVAR "cmdecho" 0) (setq os (getvar "osmode")) (setq A (getreal" :输入边长")) (setq ANG (getreal" :输入角度")) setq r (getreal" :输入半径")) (setq p1 (getpoint" :指定起点")) (setvar "osmode" 0) (setq p2 (polar p1 (* pi (/ ANG 180)) A)) (setq p3 (polar p2 (* pi (+ 0.5 (/ ANG 180))) A)) (setq p4 (polar p1 (* pi (+ 0.5 (/ ANG 180))) A)) (command "pline" p1 p2 p3 p4 "c") (SETQ p5 (polar p1 (+ (* pi (/ ANG 180)) (* 0.25 pi)) (* A (sin (/ pi 4))))) (command "circle" p5 r) (setvar "osmode" os) (SETVAR "cmdecho" CMD) (PRINC))2023-08-10 08:28:361
在cad中如何创建lisp程序?以及大神们所说的lisp解决重复性劳动问题是怎么回事?
CAD支持AutoLisp程序设计语言, AutoLisp代码可以在任意的文本编辑器中创建.不过AutoCAD也提供了Visual Lisp编辑器,可以支持语法高亮,调试编译什么的.打开Visual Lisp编辑器有两种方式:1. AutoCAD2008及之前的版本,在菜单栏“工具(Tools)"下面,选择”AutoLisp"---->"Visual Lisp编辑器".(”AutoLisp"---->"导入应用"这个命令是用来加载AutoLisp脚本的.2. AutoCAD2009及之后的版本, 在功能区的”管理“选项卡里可以直接打开Visual Lisp编辑器。首先,AutoLisp也是一个程序设计语言,作为一个编程语言,AutoLisp能做的很多:扩充AutoCAD的原有命令。任何带有C:前缀的AutoLisp函数,在AutoCAD中都可以像"line" "circle" "dim"等命令一样使用。编写代码直接根据国标图库要求来绘出一些常用图库标准件什么的,或是代替人查找各种设计手册中的相关数据并继续使用。进行参数化绘图,对于一些不特别复杂的系统,提供窄范围、大深度的专业设计自动化或者辅助系统,如发动机装配工具设计、纵使机主轴箱设计等。以上这些功能都可以解决重复性劳动,前提是你得先学会AutoLisp编程语言.2023-08-10 08:28:451
如何使用LISP命令来实现修改 "块"的名字
rename这个命令还要手动操作,选择. 有没有用LISP命令来实现已知块名修改成另外块名的方式. 使用LISP语言来自动实现,中间不需要鼠标操作的.2023-08-10 08:28:552
lisp语言如何编写圆弧,请给与详细解释
用command函数画出来就是了。LISP中command()非常强大,还应用简单。2023-08-10 08:29:042
visual lisp和auto lisp有什么区别?和lisp语言有什么关系?lisp语言有版本
vlisp是alisp的一个加强版。在cad中的lisp语言,就是运用的lisp的语法格式,对于vlisp中的函数具有专一性,主要用于cad的二次开发。没有版本之分。基本上写的程序可以用于cad2002-2016都可以2023-08-10 08:29:121
lisp 扩展数据
写入扩展数据,下面有些自己写的函数,希望对你有用。(defun regapp-new (appname) (if (tblsearch "appid" appname) ; Checks if already registered. T (if (= (regapp appname) nil) ; Some other problem. nil T ) ))(defun get-xdata (ent appname / ent-data ex-data);;; (get-xdata (car (entsel)) "appname") (setq ent-data (entget ent "("*"))) (if (and (setq ex-data (assoc -3 ent-data)) (setq ex-data (assoc appname (cdr ex-data))) ) (cdr (assoc 1000 (cdr ex-data))) ))(defun overwrite-xdata (ent appname value / ent-data ex-data ex-data-old ex-data-new );;; (overwrite-xdata (car (entsel)) "appname" "需要记录的内容") (setq ent-data (entget ent "("*"))) (setq ex-data (assoc -3 ent-data)) (setq ex-data-old (assoc appname (cdr ex-data))) (if ex-data-old (progn (setq ex-data-new (subst (cons 1000 value) (assoc 1000 (cdr ex-data-old)) ex-data-old ) ) (setq ex-data (subst ex-data-new ex-data-old ex-data ) ) ) (if (regapp-new appname) (progn (setq ex-data-new (cons appname (list (cons 1000 value)) ) ) (setq ex-data (append (if ex-data ex-data "(-3) ) (list ex-data-new) ) ) ) ) ) (entmod (append (entget ent) (list ex-data))))2023-08-10 08:29:201
Auto cad中的LISP语言是什么?有怎样的用途?
lisp语言是用于CAD二次开发,你可以通过lisp语言编程来增加自己习想要但是通用模块里没有的命令,比如你想画个螺钉,但是CAD通用模块中不提供这个命令,这时候你就可以通过lisp语言编程编写一个画螺钉的命令,在画图过程中你只需要输入命令然后输入螺钉的基本参数就可以很快画出一个螺钉。不知道我说的是否够清楚!你可以到网上找个小程序试下。2023-08-10 08:29:502
Lisp 值得去学习吗
Lisp值得去学习。LISP语言(LISP,List Processing的缩写)是一种早期开发的、具有重大意义的表处理语言。它适用于符号处理、自动推理、硬件描述和超大规模集成电路设计等。特点是,使用表结构来表达非数值计算问题,实现技术简单。LISP语言已成为最有影响,使用十分广泛的人工智能语言。在LISP语言中,数据和函数都是采用符号表达式定义的,这种符号表达式称为S一表达式,它是原予和表的总称。原子分为符号原子和数原子。符号原子是指有限个大写字母和数字组成的字符串,其中第一个符号必须是字母。原子NIL和T分别表示逻辑假(或空表)和逻辑真。数原子是指一串数字,通过符号表示其正负。扩展资料:LISP语言版本很多,常用的有:(1)MACLISP语言:1971年由MIT人工智能实验室研制,它比较注重效率、地址空间的保护和构造工具的灵活性。(2)INTERLISP语言:1978年由DEC和XEROX公司开发,它强调即使在速度和存贮空间方面有所损失,也要尽可能地提供最好的程序环境。(3)ZETALISP语言;在LISP机上实现。它和MACLISP关系密切,有很好的兼容性。并且对MACLISP进行了很多改进,提供了新的性能。(4)QLISP语言:它嵌在INTERLISP中,能灵活处理大型数据库,具有返回追踪与模式调用功能。(5)CommonLISP语言:它是在MACLISP的基础上发展起来的,并参考了INTERLISP和ZETALISP,因而功能较强且拥有其它版本的一些优点,已被广泛使用。(6)GCLISP语言:它作为CommonLISP在PC机上实现的第一个缩本,自然具有ConlmonLISP的通用性特点,其程序电容易移植到其它版本的LISP环境之中。GCLISP和CommonLISP核心部分兼容,与ZETALISP的某些概念吻合,此外还拥有若干先进的数据类型,着眼于让机器有较强的处理能力和记忆功能,因而效率较高,用户易于掌握,使用比较广泛。2023-08-10 08:30:091
"Lisp"值得去学习吗?
一、 如果我们把流行的编程语言,以这样的顺序排列:Java、Perl、Python、Ruby。你会发现,排在越后面的语言,越像Lisp。Python模仿Lisp,甚至把许多Lisp黑客认为属于设计错误的功能,也一起模仿了。至于Ruby,如果回到1975年,你声称它是一种Lisp方言,没有人会反对。编程语言现在的发展,不过刚刚赶上1958年Lisp语言的水平。 二、 1958年,John McCarthy设计了Lisp语言。我认为,当前最新潮的编程语言,只是实现了他在1958年的设想而已。 这怎么可能呢?计算机技术的发展,不是日新月异吗?1958年的技术,怎么可能超过今天的水平呢? 让我告诉你原因。 这是因为John McCarthy本来没打算把Lisp设计成编程语言,至少不是我们现在意义上的编程语言。他的原意只是想做一种理论演算,用更简洁的方式定义图灵机。 所以,为什么上个世纪50年代的编程语言,到现在还没有过时?简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不 应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序(Quicksort)算法进行类比。这种算法是1960年提出的,至今仍然是最 快的通用排序方法。 三、 Fortran语言也是上个世纪50年代出现的,并且一直使用至今。它代表了语言设计的一种完全不同的方向。Lisp是无意中从纯理论发展 为编程语言,而Fortran从一开始就是作为编程语言设计出来的。但是,今天我们把Lisp看成高级语言,而把Fortran看成一种相当低层次的语 言。 1956年,Fortran刚诞生的时候,叫做Fortran I,与今天的Fortran语言差别极大。Fortran I实际上是汇编语言加上数学,在某些方面,还不如今天的汇编语言强大。比如,它不支持子程序,只有分支跳转结构(branch)。 Lisp和Fortran代表了编程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。从那时起,这两大方向一直在互相靠拢。 Lisp刚设计出来的时候,就很强大,接下来的二十年,它提高了自己的运行速度。而那些所谓的主流语言,把更快的运行速度作为设计的出发点,然后再用超过 四十年的时间,一步步变得更强大。 直到今天,最高级的主流语言,也只是刚刚接近Lisp的水平。虽然已经很接近了,但还是没有Lisp那样强大。 四、 Lisp语言诞生的时候,就包含了9种新思想。其中一些我们今天已经习以为常,另一些则刚刚在其他高级语言中出现,至今还有2种是Lisp独有的。按照被大众接受的程度,这9种思想依次是: 1. 条件结构(即"if-then-else"结构)。现在大家都觉得这是理所当然的,但是Fortran I就没有这个结构,它只有基于底层机器指令的goto结构。 2. 函数也是一种数据类型。在Lisp语言中,函数与整数或字符串一样,也属于数据类型的一种。它有自己的字面表示形式(literal representation),能够储存在变量中,也能当作参数传递。一种数据类型应该有的功能,它都有。 3. 递归。Lisp是第一种支持递归函数的高级语言。 4. 变量的动态类型。在Lisp语言中,所有变量实际上都是指针,所指向的值有类型之分,而变量本身没有。复制变量就相当于复制指针,而不是复制它们指向的数据。 5. 垃圾回收机制。 6. 程序由表达式(expression)组成。Lisp程序是一些表达式区块的集合,每个表达式都返回一个值。这与Fortran和大多数后来的语言都截然不同,它们的程序由表达式和语句(statement)组成。 区分表达式和语句,在Fortran I中是很自然的,因为它不支持语句嵌套。所以,如果你需要用数学式子计算一个值,那就只有用表达式返回这个值,没有其他语法结构可用,因为否则就无法处理这个值。 后来,新的编程语言支持区块结构(block),这种限制当然也就不存在了。但是为时已晚,表达式和语句的区分已经根深蒂固。它从Fortran扩散到Algol语言,接着又扩散到它们两者的后继语言。 7. 符号(symbol)类型。符号实际上是一种指针,指向储存在哈希表中的字符串。所以,比较两个符号是否相等,只要看它们的指针是否一样就行了,不用逐个字符地比较。 8. 代码使用符号和常量组成的树形表示法(notation)。 9. 无论什么时候,整个语言都是可用的。Lisp并不真正区分读取期、编译期和运行期。你可以在读取期编译或运行代码;也可以在编译期读取或运行代码;还可以在运行期读取或者编译代码。 在读取期运行代码,使得用户可以重新调整(reprogram)Lisp的语法;在编译期运行代码,则是Lisp宏的工作基础;在运行期编 译代码,使得Lisp可以在Emacs这样的程序中,充当扩展语言(extension language);在运行期读取代码,使得程序之间可以用S-表达式(S-expression)通信,近来XML格式的出现使得这个概念被重新"发 明"出来了。 五、 Lisp语言刚出现的时候,它的思想与其他编程语言大相径庭。后者的设计思想主要由50年代后期的硬件决定。随着时间流逝,流行的编程语言不断更新换代,语言设计思想逐渐向Lisp靠拢。 思想1到思想5已经被广泛接受,思想6开始在主流编程语言中出现,思想7在Python语言中有所实现,不过似乎没有专用的语法。 思想8可能是最有意思的一点。它与思想9只是由于偶然原因,才成为Lisp语言的一部分,因为它们不属于John McCarthy的原始构想,是由他的学生Steve Russell自行添加的。它们从此使得Lisp看上去很古怪,但也成为了这种语言最独一无二的特点。Lisp古怪的形式,倒不是因为它的语法很古怪,而 是因为它根本没有语法,程序直接以解析树(parse tree)的形式表达出来。在其他语言中,这种形式只是经过解析在后台产生,但是Lisp直接采用它作为表达形式。它由列表构成,而列表则是Lisp的基 本数据结构。 用一门语言自己的数据结构来表达该语言,这被证明是非常强大的功能。思想8和思想9,意味着你可以写出一种能够自己编程的程序。这可能听起来很怪异,但是对于Lisp语言却是再普通不过。最常用的做法就是使用宏。 术语"宏"在Lisp语言中,与其他语言中的意思不一样。Lisp宏无所不包,它既可能是某样表达式的缩略形式,也可能是一种新语言的编译器。如果你想真正地理解Lisp语言,或者想拓宽你的编程视野,那么你必须学习宏。 就我所知,宏(采用Lisp语言的定义)目前仍然是Lisp独有的。一个原因是为了使用宏,你大概不得不让你的语言看上去像Lisp一样古 怪。另一个可能的原因是,如果你想为自己的语言添上这种终极武器,你从此就不能声称自己发明了新语言,只能说发明了一种Lisp的新方言。 我把这件事当作笑话说出来,但是事实就是如此。如果你创造了一种新语言,其中有car、cdr、cons、quote、cond、 atom、eq这样的功能,还有一种把函数写成列表的表示方法,那么在它们的基础上,你完全可以推导出Lisp语言的所有其他部分。事实上,Lisp语言 就是这样定义的,John McCarthy把语言设计成这个样子,就是为了让这种推导成为可能。 六、 就算Lisp确实代表了目前主流编程语言不断靠近的一个方向,这是否意味着你就应该用它编程呢? 如果使用一种不那么强大的语言,你又会有多少损失呢?有时不采用最尖端的技术,不也是一种明智的选择吗?这么多人使用主流编程语言,这本身不也说明那些语言有可取之处吗? 另一方面,选择哪一种编程语言,许多项目是无所谓的,反正不同的语言都能完成工作。一般来说,条件越苛刻的项目,强大的编程语言就越能发挥 作用。但是,无数的项目根本没有苛刻条件的限制。大多数的编程任务,可能只要写一些很小的程序,然后用胶水语言把这些小程序连起来就行了。你可以用自己熟 悉的编程语言,或者用对于特定项目来说有着最强大函数库的语言,来写这些小程序。如果你只是需要在Windows应用程序之间传递数据,使用Visual Basic照样能达到目的。 那么,Lisp的编程优势体现在哪里呢? 七、 语言的编程能力越强大,写出来的程序就越短(当然不是指字符数量,而是指独立的语法单位)。 代码的数量很重要,因为开发一个程序耗费的时间,主要取决于程序的长度。如果同一个软件,一种语言写出来的代码比另一种语言长三倍,这意味 着你开发它耗费的时间也会多三倍。而且即使你多雇佣人手,也无助于减少开发时间,因为当团队规模超过某个门槛时,再增加人手只会带来净损失。Fred Brooks在他的名著《人月神话》(The Mythical Man-Month)中,描述了这种现象,我的所见所闻印证了他的说法。 如果使用Lisp语言,能让程序变得多短?以Lisp和C的比较为例,我听到的大多数说法是C代码的长度是Lisp的7倍到10倍。但是最 近,New Architect杂志上有一篇介绍ITA软件公司的文章,里面说"一行Lisp代码相当于20行C代码",因为此文都是引用ITA总裁的话,所以我想这 个数字来自ITA的编程实践。 如果真是这样,那么我们可以相信这句话。ITA的软件,不仅使用Lisp语言,还同时大量使用C和C++,所以这是他们的经验谈。 根据上面的这个数字,如果你与ITA竞争,而且你使用C语言开发软件,那么ITA的开发速度将比你快20倍。如果你需要一年时间实现某个功能,它只需要不到三星期。反过来说,如果某个新功能,它开发了三个月,那么你需要五年才能做出来。 你知道吗?上面的对比,还只是考虑到最好的情况。当我们只比较代码数量的时候,言下之意就是假设使用功能较弱的语言,也能开发出同样的软 件。但是事实上,程序员使用某种语言能做到的事情,是有极限的。如果你想用一种低层次的语言,解决一个很难的问题,那么你将会面临各种情况极其复杂、乃至 想不清楚的窘境。 所以,当我说假定你与ITA竞争,你用五年时间做出的东西,ITA在Lisp语言的帮助下只用三个月就完成了,我指的五年还是一切顺利、没有犯错误、也没有遇到太大麻烦的五年。事实上,按照大多数公司的实际情况,计划中五年完成的项目,很可能永远都不会完成。 我承认,上面的例子太极端。ITA似乎有一批非常聪明的黑客,而C语言又是一种很低层次的语言。但是,在一个高度竞争的市场中,即使开发速度只相差两三倍,也足以使得你永远处在落后的位置。2023-08-10 08:30:241
LISP的语言标准
衍生LISP语言曾认证于以下标准: ANSI X3.226-1994 - 1994年,程式语言Common Lisp(Common Lisp Programming language ) IEEE standard 1178–1990 (R1995) 1995年, 程式语言Scheme(Scheme Programming language ) ISO/IEC 13816:1997- 1997年,程式语言ISLISP(ISLISP Programming language )已撤回 ISO/IEC 13816:2007 - 2007年,程式语言ISLISP(ISLISP Programming language )2023-08-10 08:30:591
怎么在启动CAD时自动加载Lisp的工具和插件
在工具里面设置一下就行2023-08-10 08:31:255
CAD加载LISP命令,出现函数被取消,建议将(command)调用转换为(command-s)
一步解决2023-08-10 08:32:512
Scheme/Lisp有类型系统吗
lisp是一门反人类的语言,有两个特征,函数式编程,和它是一门面向语言的语言关于第一个特征:没有赋值,状态变量不能保存,只能通过不停调用函数地运作,强制要你进行递归性的思考,由此而衍生出非常抽象的概念和晦涩的技巧,如以函数作为算子运算出函数的函数,堪称计算机领域的泛函语言,由于在思维上与数学有天然的契合度,lisp适合于类型推演等理论方向。关于第二个特征:lisp即list processing,表处理语言,对于数据和代码都只采用同一种结构来表示,这意味着lisp可以很优雅地将它的代码当作数据来处理。。。是的,在lisp里面,数据跟代码的界限是非常模糊。所以lisp是可以生成代码的语言,你完全可以利用lisp发明出属于你自己的特定语言,此所谓面向语言的语言。。。什么人在用:基于上述两点,你可以知道lisp非常难学,也非常难用。那么谁在用呢?有四类人:学生。SICP听过吧?全球知名课程,这类人基本是闲的无聊,用用lisp来折磨折磨自己的大脑,感受感受这种当今世界中最接近神的宗教式的语言Geek。这类人痴迷一切小众装13的技术,lisp自然成为喜欢泡在代码堆里的他们饭后闲暇的谈资,睡前冥想的材料,周末消遣的玩意; 此外,Geek也是希望通过lisp找到一条通往天堂的路计算机科学家。这类人喜欢思考,尤喜那些错综复杂、扑所迷离的概念,抽象复杂却又大道至简的lisp自然正合其意,也是顺便找个可以发paper升职加薪的方向凡人。lisp有很多方言,所谓方言,即lisp的变种。如Autolisp,用在制图领域;Elisp,用在配置编辑器emacs。这里面有不少伪用户(当然elisp高手除外),他们只是工作的需要而泛泛一用,对lisp的本质和方法未做深思,也谈不上了解2023-08-10 08:33:111
lisp有什么比较好用的编译器么
因为编译器只是个命令工具没什么叫"好用"的...我假设你问的是"编辑器"而不是"编译器":首先, 你问的是哪种lisp, 因为lisp有很多种.如果你需要对所有lisp都好用的编辑器, 估计只有emacs和vim可以满足你要求. 如果只要最常见的那些lisp, 除了这两个一般都有些专门为他优化的插件支持的编辑器, 比如 clojure有lighttable和nightcode, racket 有GRacket 等如果你真的问的是编译器的话, 请具体说是哪种lisp,因为不同的lisp编译器是完全不一样的, 比如common lisp 我是喜欢 ccl (很多人更喜欢sbcl), 比如scheme的话显然chez是最好得编译器2023-08-10 08:33:491
如何用lisp程序提取选择的属性块中的length属性,并加合,最后给出结果
一般有两个方案第一个方案:用AutoLisp方案,首先用 取得图块这个图元,然后用 entnext 逐一找到属性块来找到其中length的属性,然后将它的值给找出来,然后进行运算,注意 entnext 的运用。这个很简单,你自己应该写吧。第二个方案:用VisualLisp方案,注意vla-getattributes,vlax-variant-value,vlax-safeArray->list这几个函数的运用,以下为 VisualLisp的例子(Defun C:Test () (setq en0 (car (entsel))) ;;此处请选有属性定义的图块 (setq vn0 (vlax-ename->vla-object en0)) (setq lstVar (vla-getattributes vn0)) (setq lstAttrs (vlax-safeArray->list (vlax-variant-value lstVar))) (setq TextString nil) (foreach attr lstAttrs (setq TagString (vla-get-TagString attr)) (if (equal TagString "length") ;此处为你想要的元素 (setq TextString (vla-get-TextString attr)) ) ) (if TextString (princ (strcat "The content of length = " TextString)) (princ "没有找到length ") ) (prin1))2023-08-10 08:34:121
lisp函数是不是cad的命令?
lisp本身就是cad所属的开发程序,他提供一些简单的函数计算,剩下的就全是针对autocad的绘图功能了。lisp程序类似与数据库中的存储过程,可以批量的处理绘制cad图形。学习lisp是很简单的,只要掌握了几个主要命令的使用就行,就是对语句格式要求很研,本身lisp的函数相当多,不必去记。加载LISP1.可以使用APPLOAD命令,然后去找到要加载的LISP文件,加载即可。2.可以自己从文件管理器把LISP文件拖动到ACAD的图形窗口,也可以加载3.在命令行后用,(load"c: empxxx.lsp")也可以加载,路径名请输入实际的路径。另:对于一个LSP程序,(defun后面的既是命令或者函数,一般程序应该有提示,若没有,标志符c:后面的单词是可以在ACAD下使用的命令,既可以在COMMAND:后面直接输入,即可执行。2023-08-10 08:34:191
CAD实用LISP文件放哪里
C:Program FilesAutoCAD 2007Express2023-08-10 08:34:293
lisp选择集的问题?
你的目标是删除所有名为"TCH_SYMB_SECTION"的图元。如果你的代码不能成功删除图元,并返回错误0,可能的原因是`ssget`函数并未选中任何图元,因此`D1`可能是一个空集,所以`COMMAND "ERASE"`无法删除任何图元。你的代码应该是正确的,只要你的CAD文件中存在类型为"TCH_SYMB_SECTION"的图元。如果无法成功执行,你可能需要检查你的CAD文件是否确实存在这样的图元。以下是你的代码,它应该可以删除所有名为"TCH_SYMB_SECTION"的图元:(setq D1 (ssget "X" "((0 . "TCH_SYMB_SECTION")))) 注意,我在`ssget`函数中的选择集过滤器参数中添加了点号`.`,因为在AutoLISP中,点号`.`用于构造点对(pair),这是`ssget`函数的选择集过滤器参数需要的格式。如果这段代码仍然无法工作,你可以试着使用以下的代码,它会打印出所有名为"TCH_SYMB_SECTION"的图元的详细信息,以便你进行调试:(setq D1 (ssget "X" "((0 . "TCH_SYMB_SECTION"))))(mapcar "entget (vl-remove-if "listp (mapcar "cadr D1)))这段代码会使用`vl-remove-if`函数来移除所有列表元素(因为我们只关心图元名称),然后对每个图元使用`entget`函数来获取其详细信息。2023-08-10 08:34:581
凸度的CAD lisp定义
凸度定义设圆弧所包含的圆心角为A(弧度表示),则凸度=四分之一圆心角之正切值lisp表示(setq 凸度 ((sin ( A / 4.0)) / (cos ( A / 4.0))))C#表示凸度=sin(A/4)/cos(A/4)凸度值的范围即sin(A/4)/cos(A/4)的取值范围,A=0~2*PI0到正无穷,当A=360时,cos90=0,所以值无效凸度的正负表明弧的方向2023-08-10 08:35:061
lisp创建编组
(command "GROUP" "C" "*" "*" en1 en2 en3 en4 "");;编组编组的功能我不是很清楚,只是用到这个的时候才研究了一下,编组的时候要命名,但是对象一多的话,命名就显的多余了,所以用"*"取消命名。en1 en2 这个对象,如果用ssget选择&kw的话,对象就是i=0,(setq en1 (ssname &kw i))(setq i (+ i 1))的方法提取。如果用entsel选择的对象&kw的话,对象就是(setq en1 (car &kw));如果是刚刚绘制的图形用(setq en1 (entlast))得到的图形就是图元名。创建了选择集后将此选择集保存为一个编组,我没有测试,不过可以试试这样的方法你测试一下:&kw是(ssget)选择集:(setq &k1 (ssname &kw 0));;提取(ssget)选择集里面的第一个对象(setq i 2);;(command "GROUP" "C" "*" "*" &k1);;这个对象加入并准备编组,根据多段线绘制方法差不多 (setq &k1 (ssname &kw 1));;提取第二个对象,编组的话,应当要两个对象以上, (while &k1;;选择循环 (command &k1);;加入编组 (setq &k1 (ssname &kw i));;取得第三个对象如果没有就结束循环 (setq i (+ i 1));; ) (command "");;编组结束你测试一下是不是可行,我没有测试,就是提供思路给你。2023-08-10 08:35:211
lisp 中vlax-ename->vla-object是什么意思
这是cad自带的vlisp函数,你的cad可能加载了一些自定义程序,这些程序用了这个函数。 而你的cad里这个函数似乎丢失了。 解决的办法就是重新安装cad, 06版本以上的cad。2023-08-10 08:35:292
lisp CAD二次开发
这样写(DEFUN C:CU () (COMMAND "-LAYER" "S" (ssget) "" ))还可以这样写(DEFUN C:CU () (COMMAND "-LAYER" "S" pause "" )) 晕,楼主赶紧收掉这个问题吧,2023-08-10 08:35:392
CAD切换标注样式的LISP
工具autolist,visual,LISP编辑器,可以切换标注样式。lisp语言适用于cad二次开发,你可以通过lisp语言编程来增加自己想要但是通用模块里没有的命令,比如你想画个螺钉,但是cad通用模块中不提供这个命令,这时候你就可以通过lisp语言编程编写一个画螺钉的命令,在画图过程中,你只需要输入命令,然后输入螺钉的基本参数就可以很快画出一个螺钉。2023-08-10 08:36:221
怎样在LISP中修改标注样式
结尾少了半边括号标注文字样式有问题2023-08-10 08:36:302
lisp怎么调用其他程序
因为在lisp中做一些工程计算比较麻烦,拟把这些工程计算用C语言来完成,程序名为a.exe。执行a.exe生成txt文件保存计算结果。在执行lisp命令时调用a.exe,并取得a.exe生成的文本数据。这样根据a.exe生成数据再在lisp中画图就可以了。不知能否做到,如何实现,2023-08-10 08:36:401