为什么要学习Lisp?
我真的觉得我应该学习Lisp,并且那里有很多好的资源可以帮助我做到这一点。
我不会因为复杂的语法而感到不满意,但是我会在"传统商业编程"中找到合适的地方使用它而不是过程语言。
有没有用Lisp编写的商业杀手级应用程序?
解决方案
回答
复杂的语法?
Lisp的语法非常简单。
用Lisp编写的杀手级应用:emacs。 Lisp允许我们随意扩展emacs,以执行编辑器可能想到的几乎所有事情。
但是,如果我们愿意的话,我们应该只学习Lisp,而且我们可能永远都不会在工作中使用它,但是它仍然很棒。
另外,我想补充一点:即使我们找到了可以使用lisp的地方,我们也可能不会说服其他人将其用于Java,C ++,C#,Python,ruby等。
回答
我无法从第一手的经验中回答,但是我们应该阅读Paul Graham在Lisp上写的内容。至于"杀手级应用"部分,请阅读击败平均值。
回答
我同意Lisp是我们在商业环境中永远不会使用的那些语言之一。但是,即使我们不懂,学习它肯定也会扩展我们对整个编程的理解。例如,我在大学里学习过Prolog,虽然以后我从未使用过它,但是我却使我对许多编程概念有了更深入的了解,并且(有时)对我使用的语言有了更深的了解。
但是,如果我们要学习它……一定要阅读《关于Lisp》
回答
语法复杂吗? Lisp的优点在于它具有非常简单的语法。它只是一个列表,列表中的每个元素可以是另一个列表或者基本数据类型。
值得学习的是,因为它可以增强编码能力,从而可以将函数作为另一种数据类型进行思考和使用。这将改善我们使用命令式和/或者面向对象的语言进行编码的方式,因为这将使我们在代码结构方面更加灵活。
回答
好的,我可能很奇怪,但是我真的不喜欢Paul Graham的论文,如果我们还不了解Common Lisp,那么关于Lisp的书将是一本非常粗糙的书。相反,我会说选择Siebel的《实践通用Lisp》。至于"杀手级应用程序",Common Lisp似乎在诸如ITA之类的利基商店中找到了自己的位置,因此,尽管没有像Rails那样将CL与Ruby等同的应用程序,但是如果我们愿意,那么在行业中就有很多地方可以使用它。有点挖。
回答
Lisp的主要用途之一是在人工智能中。我的一个大学朋友曾参加过AI研究生课程,并为他的主要项目在Lisp中编写了" Lights Out"求解器。他的程序的多个版本使用了稍有不同的AI例程,并在40台左右的计算机上进行了测试,得出了非常整洁的结果(我希望它可以在线链接到我的电脑,但我认为不是)。
两个学期前,我使用Scheme(一种基于Lisp的语言)编写了一个交互式程序,该程序模拟了Abbott和Costello的" Who's on First"例程。将来自用户的输入与一些相当复杂的数据结构(类似于其他语言的地图,但更加灵活)进行匹配,以选择适当的响应。我还编写了一个例程来解决3x3幻灯片难题(该算法可以很容易地扩展到更大的幻灯片难题)。
总而言之,学习Lisp(或者Scheme)可能不会产生超出AI的许多实际应用,但正如许多其他人所述,这是非常有价值的学习经验。使用Lisp之类的功能语言进行编程也将进行递归思考(如果我们在使用其他语言进行递归时遇到麻烦,这可能会很有帮助)。
回答
语法无关紧要,可读性不是!
回答
如果不使用一种语言的通用缩进约定,则任何一种语言看起来都会困难得多。当人们遵循Lisp时,就会看到它如何很容易地表达语法树结构(请注意,这并不完全正确,因为预览位置有点; r应该与递归quicksort参数中的fns对齐):
(defun quicksort (lis) (if (null lis) nil (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x)))) (append (quicksort (remove-if-not fn r)) (list x) (quicksort (remove-if fn r))))))
回答
我用Lisp专业编程大约一年,这绝对值得学习。通过能够在可能的情况下用函数替换所有样板代码,而在可能的地方不替换宏,我们将有无与伦比的机会来消除代码中的冗余。我们还可以在运行时访问无与伦比的灵活性,在代码和数据之间自由转换。因此,Lisp真正发挥作用的地方是用户操作可以触发需要动态构建复杂结构的需求。流行的航班时刻表是用Lisp编写的,并且Lisp中也有很多CAD / CAM。
回答
我发现学习一种新语言始终会影响我们已经知道的语言的编程风格。对我来说,它总是使我以不同的方式思考以我的主要语言Java解决问题。我认为,总体而言,它只是拓宽了我们在编程方面的视野。
回答
如果我们必须问自己是否应该学习Lisp,则可能不需要。
回答
学习lisp将使Java完全不同! Lisp确实迫使我们掌握递归和整个"作为一流对象的功能"范式。参见Crockfords关于Scheme vs Javascript的出色文章。 Java语言也许是当今最重要的语言,因此更好地理解它非常有用!
回答
这是我本人已经思考了一段时间的话题,但是我还没有真正下定决心,因为平时的时间是主要问题...;)
而且由于我在这篇文章中找不到这些链接,所以我出于公共利益添加它们:
成功与失败的故事:
在JPL上口
真正令人印象深刻的成功故事:
Lisp在Orbitz公司使用
回答
比较和分析是否使用Lisp代替Java:
Lisp替代Java
回答
如果我们喜欢编程,则应该学习Lisp的纯粹乐趣。 XKCD完美地表达了随之而来的智力启蒙。学习Lisp对程序员而言,冥想对和尚而言(我的意思是,这没有任何亵渎的含义)。
要添加到其他答案中:
回答
因为SICP课程(此处提供视频)非常棒:可以教给Lisp和更多东西!
杀手级应用? Franz Inc.有很多成功的案例,但是此列表仅包括AllegroCL的用户...可能还有其他用户。我最喜欢的是有关顽皮狗的故事,因为我是Crash Bandicoot游戏的忠实粉丝。
回答
为了学习Common Lisp,我建议我们使用Practical Lisp。它有一个动手的方法,至少对我来说,它比我看过的其他书更容易。
回答
Lisp对于创建少量DSL非常有用。我有一个Lisp的副本在运行中的Box中,并且我写了一些DSL来查询SQL Server数据库并在C#中生成数据层等。现在,我所有的样板代码都写在输出到C#的lisp宏中。我用它生成HTML,XML和各种各样的东西。虽然我希望可以使用Lisp进行日常编码,但Lisp可以带来实际的好处。
八十年代,我在大学里上过" lisp课"。尽管忽略了课堂上提出的所有概念,但我对Lisp的出色之处一无所知。恐怕很多人将Lisp视为另一种编程语言,这就是很多年前大学课程为我所做的。如果我们看到有人抱怨Lisp语法(或者缺乏Lisp语法),那么他们很有可能是未能掌握Lisp的伟大之处的人之一。我很长一段时间就是其中的一员。
回答
直到二十年后,当我重新点燃了对Lisp的兴趣时,我才开始"发现"了使Lisp变得有趣的东西-无论如何对我来说。如果我们在学习Lisp时没有被闭包和Lisp宏所震撼,那么我们可能已经错过了重点。
Lisp是一种庞大而复杂的语言,具有庞大而复杂的运行时来支持它。因此,Lisp最适合大型和复杂的问题。
现在,一个复杂的问题与一个复杂的问题并不相同。一个复杂的问题是有很多小细节的问题,但这并不难。编写机票预订系统是一项复杂的业务,但是有了足够的资金和程序员,这并不难。有所不同?
一个复杂的问题是一个令人费解的问题,传统的分而治之是行不通的。控制机器人,或者使用非表格数据(例如语言)或者高度动态的情况。
Lisp非常适合解决方案必须扩展的问题。经典示例是emacs文本编辑器。它是完全可编程的,因此它本身就是一个编程环境。
在他著名的书《 PAIP》中,Norvig说Lisp是探索性编程的理想选择。也就是说,为尚未完全理解的问题编写解决方案(与在线预订系统相对)。换句话说:复杂的问题。
此外,学习Lisp会让我们想起一些被遗忘的基本知识:冯·诺伊曼(Von Neumann)和图灵(Turing)之间的区别。众所周知,图灵的计算模型是一个有趣的理论模型,但是作为设计计算机的模型却毫无用处。另一方面,冯·诺依曼(Von Neumann)设计了一个计算机和计算执行方式的模型:冯·诺依曼(Von Neumann)模型。
冯·诺依曼模型的核心是只有一个内存,并在其中存储代码和数据。请注意,Java程序(或者C#或者我们喜欢的任何东西)是Turing模型的体现。一劳永逸地将程序设置为具体。然后,我们希望可以处理所有抛出的数据。
Lisp保留了冯·诺伊曼(Von Neuman)模型;在代码和数据之间没有明确的预定边界。使用Lisp进行编程使我们可以放心Von Neumann模型的强大功能。使用Lisp进行编程可以使我们以新的眼光看待旧概念。
最后,是交互式的,我们将在开发程序时学习与程序的交互(而不是编译和运行)。这也改变了编程的方式以及查看编程的方式。
有了这个介绍,我终于可以回答问题:我们会找到比"传统"语言更好的地方吗?
回答
如果我们是高级程序员,则需要高级工具。而且没有比Lisp更先进的工具。
或者换句话说:如果问题很困难,答案是肯定的。否则没有。
我们今天可以使用Clojure在Java VM之上编写测试和脚本。尽管在JVM上实现了其他Lisp语言,但我认为Clojure在与Java集成方面做得最好。
回答
有时Java语言本身会妨碍编写Java代码测试(包括"传统商业编程")。 (我并不是说要对Java提出起诉-其他语言也会遇到相同的问题-但这是事实。既然不是Java,而是主题,我就不再赘述。如果有人愿意,请随时开始一个新主题。讨论它。)Clojure消除了许多障碍。
回答
回应@lassevk:
这不是原因,而是(平凡的)AutoCAD具有LISP和DCL运行时支持。如果我们不想使用VBA或者其C ++或者.NET SDK,或者如果DIESEL表达式不能剪切它,这是一种编写复杂宏(包括ActiveX自动化)的便捷方法。
回答
AutoCAD的许多功能实际上都是LISP例程。
回答
金普(Gimp)的剧本赋是令人垂涎的。那是一个photoshop-killer应用程序。
Lisp可以在使用传统编程的任何地方使用。没什么不同,只是功能更强大。编写网络应用程序?我们可以在Lisp上完成编写桌面应用程序吗?我们可以在Lisp上执行此操作,无论如何,我们可能可以在Lisp,Python或者任何其他通用编程上执行(有几种语言仅适合一项任务)。
回答
最大的障碍可能是老板,同事或者客户的接受度。那是我们必须与他们合作的事情。选择一种实用的解决方案,例如Clojure,可以利用从JVM到库的Java基础结构的当前安装基础,可能会对我们有所帮助。另外,如果我们有Java程序,则可以做一个插件架构,并为其编写Clojure插件,最后用Clojure编写一半的代码。
学习LISP / Scheme可能不会给我们任何增加的应用程序空间,但是它将更好地理解函数式编程,其规则和异常。
回答
仅仅花时间去学习六个嵌套纯函数的美,以及六个带有副作用的嵌套函数的噩梦,这是值得的时间投入。
回答
并不是说这是一个杀手级应用,但看起来可能很酷
http://code.google.com/p/plop/
杀手级应用? ITA Software的航班搜索引擎就是其中之一。
回答
至于"为什么",它很可能使我们成为更好的开发人员,而极不可能使我们变得更糟。但是,与其他语言相比,它可能会让我们更喜欢Lisp方言。
One of the most commonly repeated myths about Lisp is that it's "dead." While it's true that Common Lisp isn't as widely used as, say, Visual Basic or Java, it seems strange to describe a language that continues to be used for new development and that continues to attract new users as "dead." Some recent Lisp success stories include Paul Graham's Viaweb, which became Yahoo Store when Yahoo bought his company; ITA Software's airfare pricing and shopping system, QPX, used by the online ticket seller Orbitz and others; Naughty Dog's game for the PlayStation 2, Jak and Daxter, which is largely written in a domain-specific Lisp dialect Naughty Dog invented called GOAL, whose compiler is itself written in Common Lisp; and the Roomba, the autonomous robotic vacuum cleaner, whose software is written in L, a downwardly compatible subset of Common Lisp. Perhaps even more telling is the growth of the Common-Lisp.net Web site, which hosts open-source Common Lisp projects, and the number of local Lisp user groups that have sprung up in the past couple of years.
段落数量不匹配