lisp语言的快速入门

lisp语言的快速入门

图片[1]-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)),表。

CAD里面的lisp有什么作用啊,怎么用,要具体的,能让我明白加分

图片[2]-lisp语言的快速入门-学吧号

lisp本身就是cad所属的开发程序,他提供一些简单的函数计算,剩下的就全是针对autocad的绘图功能了。lisp程序类似与数据库中的存储过程,可以批量的处理绘制cad图形。

学习lisp是很简单的,只要掌握了几个主要命令的使用就行,就是对语句格式要求很研,本身lisp的函数相当多,不必去记。

加载LISP 1. 可以使用APPLOAD命令,然后去找到要加载的LISP文件,加载即可。 2. 可以自己从文件管理器把LISP文件拖动到ACAD的图形窗口,也可以加载 3. 在命令行后用,(load “c:\\temp\\xxx.lsp”)也可以加载,路径名请输入实际的路径。 另:对于一个LSP程序,(defun 后面的既是命令或者函数,一般程序应该有提示,若没有,标志符c:后面的单词是可以在ACAD下使用的命令,既可以在COMMAND:后面直接输入,即可执行。

LISP要从机器语言开始学?哪有机器语言教程?

图片[3]-lisp语言的快速入门-学吧号

我学过lisp,不用从机器语言学起。学习lisp和学其他语言其实没什么两样。

你先去下载个lisp程序:http://www.franz.com/downloads/ 是免费软件。

下载 common lisp tools 然后就可以开始你的学习与实践了。lisp是门古老的语言,现主要应用于人工智能领域。如专家系统。lisp的精髓主要是递归算法,如果你有递归思路的话,lisp并不难学。

其实学习lisp不单单是学习一门语言,主要还是要了解人工智能这个领域。所以学习的时候概念和历史知识有很多。对开阔眼界很有好处。

对Lisp 新手来说,学习哪种方言,使用哪些参考书和开发软件更适合

图片[4]-lisp语言的快速入门-学吧号

Common Lisp和Scheme是Lisp家族的两大主要方言,通用性比较好,ELisp和AutoLisp只能在特定的环境下使用,所以不推荐。如果你只是想学习PF的思想,可以直接学习Scheme,FP的思想都有了,还比较简单,只不过库不太完备。

如果追求CL的强大可以看看Racket,是PTL Scheme的进化版。

IDE推荐: DrRacket书籍推荐: Teach Yourself Scheme Mit Press Simply Scheme MIT Press LISP in small pieces r5rs基本都有电子版,第三个Lisp in small pieces不能作为入门教程,它默认你已经学会了Scheme,并且着重讲如何实现一个Scheme的解释器或者编译器以及一些比较深层次的概念,不太好懂但是很开阔思路,而且经常将Scheme和CL进行对比,使你能够触类旁通。最后一个是Scheme的规范,也不适合作为入门教程,更适合作为reference,虽然它比较薄只有几十页。如果英文不太好,可以看看网上有没有中文版。不过相对来说我还是推荐Common Lisp,原因三言两语也说不清,比较正统的Lisp,工业化程度高,如果你看过《黑客与画家》应该有所了解,但是缺点是学习难度大,虽然大家都说CL久经历练,但是糟粕也不少,这些别人说了没用,只有你学完了之后做两个项目才有体会。

不过总起来说还是一门非常伟大的语言。首先由Lisp引进的编程思想包括if/then/else控制结构、递归函数调用、动态内存分配、垃圾收集、高阶函数、词法闭包、交互式编程、增量编译以及动态类型……IDE推荐: Lisp in a box LispWorks(适合高薪阶层)书籍推荐: Practical Common Lisp ANSI Common Lisp我当初就是利用这两本书学习的,不过在学习过程中主要还参考了 Lisp Quick Reference Common Lisp The Language第一本参考用公式的方式把基本用法列出,基本上覆盖了整个ANSI Common Lisp标准,但是可能比较晦涩,不过习惯了就好了。第二本就不说了,类似牛津词典,一千多页,不懂的查查就行了,一般人看不下来,看下来也没啥意思。

当你读过这些书之后,基本上已经对Lisp有一个较深的了解,这时你可以自己写个项目练练手,或者直接到github上clone一个。另外还有些书不错,但是因为你已经有了比较扎实的基础,你可以随便看看,没必要像看课本那么仔细: On Lisp(与Common Lisp The Language同一作者,相当于CLTL的进阶版) Common Lisp A Gentle Introduction to Symbolic Computation Land of Lisp(好多漫画!) Successful Lisp Tutorial on Good Lisp Programming Style The Art of the Metaobject Protocol这些书除了最后两本我都看得不是很仔细,因为很多和Practical Common Lisp、On Lisp有重复,所以我只是看一些有特点的部分。倒数第二本讲的是如何养成良好的Lisp编程风格,你可以当成散文来读。

最后一本比较深,我也没有看完,主要讲的是CLOS相关的东西,可以用来开阔思路。其实如果你想学习CL这门语言,这些足足足足足足够了,但是你还是觉得很无聊,好吧,再推荐两篇文章: The Roots of Lisp Recursive Functions of Symbolic Expressions and Their Computation by Machine Part I建议把这两篇文章打印出来,一行行的看!一是因为都比较短,花不了你多少钱,二是因为都值得反复推敲,不是看一遍就扔了。第一篇文章是paul graham写的,就是那个ANSI Common Lisp、On Lisp以及《黑客与画家》的作者,主要内容是对第二篇论文的总结概括,探讨了Lisp的根基理论,难度较小,一共就十几页,看完了会有一些新的收获,这些是你看其它语言教程看不来的。

第二篇我就不说了,Lisp的作者写的,好好看下,想想作者是如何设计出这样一门伟大的语言的,别说你数学不好,你不会学呀,再说这里用的数学也不难。

THE END
喜欢就支持一下吧
点赞14
温馨提示:

1、本内容转载于网络,版权归原作者所有!
2、本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
3、本内容若侵犯到你的版权利益,请联系我QQ:243371741,会尽快给予删除处理!