我真的觉得我应该学习 口齿不清 并且有很多好的资源可以帮助我做到这一点。

我并没有被复杂的语法所推迟,但是在“传统商业编程”中我会发现使用它而不是过程语言更有意义的地方。

有没有用 Lisp 编写的商业杀手级应用程序?

有帮助吗?

解决方案

Lisp 的主要用途之一是人工智能。我的一位大学朋友参加了人工智能研究生课程,他为他的主要项目写了一个“熄灯“ Lisp 中的求解器。他的程序的多个版本使用了略有不同的人工智能例程,并在 40 台左右的计算机上进行了测试,产生了一些非常简洁的结果(我希望它在网上某个地方可供我链接,但我认为事实并非如此)。

两个学期前,我使用Scheme(一种基于Lisp的语言)编写了一个交互式程序,模拟Abbott和Costello的“谁先”例程。用户的输入与一些相当复杂的数据结构(类似于其他语言中的地图,但更灵活)进行匹配,以选择合适的响应。我还写了一个例程来解决 3x3 幻灯片拼图 (一种可以轻松扩展到更大的幻灯片拼图的算法)。

总之,学习Lisp(或Scheme)可能不会产生除AI之外的许多实际应用,但正如许多其他人所说,它是一种极其有价值的学习经历。使用像 Lisp 这样的函数式语言进行编程也将帮助你进行递归思考(如果你在其他语言中遇到递归问题,这可能会很有帮助)。

其他提示

Lisp 是一种庞大而复杂的语言,需要庞大而复杂的运行时来支持它。因此,Lisp 最适合解决大型且复杂的问题。

现在,一个 复杂的 问题与a不一样 复杂的 一。A 复杂的 问题是一个有很多小细节的问题,但这并不难。编写航空公司预订系统是一项复杂的工作,但只要有足够的资金和程序员,这并不难。明白区别了吗?

复杂问题是一个错综复杂的问题,传统的分而治之的方法不起作用。控制机器人,或处理非表格数据(例如语言),或高度动态的情况。

Lisp 确实非常适合解决方案必须可扩展的问题;典型的例子是 emacs 文本编辑器。它是完全可编程的,因此本身就是一个编程环境。

在他的名著中 PAIP, Norvig 说 Lisp 是探索性编程的理想选择。也就是说,为尚未完全理解的问题编写解决方案(与在线预订系统相反)。换句话说:复杂的问题。

此外,学习 Lisp 会提醒你一些已经被遗忘的基本知识:冯诺依曼和图灵之间的区别。众所周知,图灵的计算模型是一个有趣的理论模型,但作为设计计算机的模型毫无用处。另一方面,冯·诺依曼设计了一个计算机和计算如何执行的模型:冯·诺依曼模型。冯·诺依曼模型的核心是您只有一个内存,并在那里存储代码和数据。仔细注意,Java 程序(或 C#,或任何您喜欢的程序)是图灵模型的体现。您一劳永逸地将您的计划具体化。然后你希望你可以处理扔在上面的所有数据。

Lisp 保留了冯诺依曼模型;代码和数据之间没有明确的、预先确定的边界。使用 Lisp 编程可以让您领略冯·诺依曼模型的力量。使用 Lisp 编程让您以新的眼光看待旧概念。

最后,通过交互,您将学习在开发程序时与程序进行交互(而不是编译和运行)。这也改变了您编程的方式以及您看待编程的方式。

通过这个介绍,我终于可以回答您的问题了:您会发现它比“传统”语言更出色的地方吗?

如果您是高级程序员,则需要高级工具。没有比 Lisp 更先进的工具了。或者,换句话说:如果你的问题很难的话,答案是肯定的。否则没有。

回应 @lassevk:

alt text

复杂的语法??

Lisp 的语法是 非常简单.

用 lisp 编写的杀手级应用程序: emacs. 。Lisp 允许你随意扩展 emacs 来完成几乎任何你能想到的编辑器可能做的事情。

, ,你应该只学习 lisp 如果你 到,你可能永远不会在工作中使用,但它仍然很棒。

另外,我想补充一点:即使你找到了 lisp 有意义的地方,你也可能无法说服其他人相信它应该优于 java、c++、c#、python、ruby 等。

我无法根据第一手经验来回答,但你应该阅读一下 保罗·格雷厄姆 写了 关于 Lisp. 。至于“杀手级应用”部分,请阅读 超越平均水平.

我用 Lisp 专业编程了大约一年,它绝对值得学习。您将有无与伦比的机会从代码中删除冗余,通过能够在可能的情况下用函数替换所有样板代码,在不可能的情况下用宏替换。您还可以在运行时获得无与伦比的灵活性,在代码和数据之间自由转换。因此,用户操作可以触发动态构建复杂结构的需求的情况才是 Lisp 真正的亮点。流行的航空公司航班调度程序是用 Lisp 编写的,也有很多 CAD/CAM 用 Lisp 编写。

Lisp 对于创建小型 DSL 非常有用。我在工作中运行了 Lisp in a Box 的副本,并且编写了一些 DSL 来查询 SQL 服务器数据库并用 C# 生成数据层等。我所有的样板代码现在都是用输出到 C# 的 lisp 宏编写的。我用它生成 HTML、XML 以及各种东西。虽然我希望能够使用 Lisp 进行日常编码,但 Lisp 可以带来实际的好处。

如果你喜欢编程,你应该学习 Lisp,因为它纯粹是一种乐趣。 西科CD 完美地表达了随之而来的智力启蒙。学习 Lisp 对于程序员来说就像冥想对于和尚一样(我的意思是没有任何亵渎的含义)。

当不使用一种语言的常见缩进约定时,任何语言看起来都会困难得多。当人们学习 Lisp 时,人们会很容易地看到它如何表达语法树结构(注意,这不太正确,因为预览有点谎言;r 应与递归快速排序参数中的 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))))))

我发现学习一门新语言总是会影响你使用已知语言的编程风格。对我来说,它总是让我以不同的方式思考来解决我的主要语言(Java)中的问题。我认为总的来说,它只是拓宽了你在编程方面的视野。

八十年代我在大学参加了“口齿不清课程”。尽管摸索了课堂上提出的所有概念,但我还是一无所知 任何 欣赏 Lisp 的伟大之处。恐怕很多人将 lisp 视为另一种编程语言,这就是多年前大学课程对我的影响。如果您看到有人抱怨 lisp 语法(或缺乏语法),那么他们很可能是未能领会 lisp 伟大之处的人之一。很长一段时间我都是这些人中的一员。

直到二十年后,当我重新燃起对 lisp 的兴趣时,我才开始“理解”是什么让 lisp 变得有趣——无论如何对我来说。如果你设法学习 lisp 而没有被闭包和 lisp 宏所困扰,那么你可能错过了重点。

学习 LISP/Scheme 可能不会给你任何增加的应用空间,但它会帮助你更好地了解函数式编程、它的规则和例外。

仅仅为了了解六个嵌套纯函数的美丽与带有副作用的六个嵌套函数的噩梦的区别就值得投入时间。

http://www.gigamonkeys.com/book/introduction-why-lisp.html

关于LISP的最常见的神话之一是它已经“死了”。虽然Common Lisp的确不像视觉基本或Java那样广泛使用,但描述一种继续用于新开发的语言似乎很奇怪,并且继续吸引新用户为“死亡”。最近的一些LISP成功故事包括保罗·格雷厄姆(Paul Graham)的Viabe,当雅虎(Yahoo)购买他的公司时,它成为雅虎商店。在线售票员Orbitz和其他人使用的ITA软件的机票定价和购物系统QPX;顽皮的狗为PlayStation 2,Jak和Daxter的游戏游戏,主要是用特定于域的LISP方言写的顽皮狗,该狗发明了名为Goal,其编译器本身是在Common Lisp中写的;Roomba是自动驾驶机器人真空吸尘器,其软件是用L编写的,这是普通LISP的下降子集。也许更具说服力的是托管开源Common LISP项目的Common-LISP.NET网站的增长,以及过去几年中出现的本地LISP用户组的数量。

“Lisp值得学习,当你最终掌握它时,你会有深刻的启蒙体验;即使你从未真正经常使用 Lisp 本身,这种经历也会让你在余下的日子里成为一名更好的程序员。”

——埃里克·S.雷蒙德,《如何成为一名黑客》

http://www.paulgraham.com/avg.html

我同意 Lisp 是你可能永远不会在商业环境中使用的语言之一。但即使你没有接触到,学习它也肯定会扩展你对整个编程的理解。例如,我在大学学习了 Prolog,虽然此后我从未使用过它,但我对许多编程概念有了更深入的理解,并且(有时)对我所使用的语言有了更大​​的欣赏。

但如果你想学习它......无论如何,请阅读 关于 Lisp

好吧,我可能很奇怪,但我真的不太喜欢 Paul Graham 的文章,如果你还没有掌握 Common Lisp,那么《On Lisp》是一本非常粗糙的书。相反,我会建议去Siebel's 实用 Common Lisp. 。至于“杀手级应用程序”,Common Lisp 似乎在小众商店中找到了自己的位置,例如 意大利塔, ,因此,虽然没有像 Rails 之于 Ruby 那样与 CL 同义的应用程序,但如果您稍加挖掘,行业中就有一些地方使用它。

如果您不得不问自己是否应该学习 lisp,那么您可能不需要这样做。

学习 Lisp 会让 Javascript 处于完全不同的角度!Lisp 确实迫使你掌握递归和整个“作为第一类对象的函数”范式。请参阅 Crockfords 的优秀文章 方案与 JavaScript. 。Javascript 也许是当今最重要的语言,因此更好地理解它非常有用!

Gimp 的 Script-Fu 很口语化。这是一款 Photoshop 杀手级应用程序。

语法复杂?Lisp 的美妙之处在于它的语法极其简单。它只是一个列表,其中列表的每个元素可以是另一个列表或基本数据类型。

它值得学习,因为它增强了您将函数视为另一种数据类型的编码能力。这将改进您使用命令式和/或面向对象语言进行编码的方式,因为它将使您对代码的结构更加灵活。

添加到其他答案:

因为 SICP 课程(视频可用 这里) 太棒了:教你Lisp 还有更多!

杀手级应用程序? 弗朗茨公司 有一个很长的清单 成功的故事, ,但此列表仅包括 AllegroCL 的用户...可能还有其他人。我最喜欢的是 关于顽皮狗的故事, ,因为我是古惑狼游戏的忠实粉丝。

对于学习 Common Lisp,我推荐 实用 Common Lisp. 。它采用了实践方法,至少对我来说比我看过的其他书更容易。

你可以使用 克洛尤尔 今天在 Java VM 上编写测试和脚本。虽然还有其他在 JVM 上实现的 Lisp 语言,但我认为 Clojure 在与 Java 集成方面做得最好。

有时,Java 语言本身会妨碍为 Java 代码(包括“传统商业编程”)编写测试。(我并不是说这是对 Java 的控诉——其他语言也面临着同样的问题——但这是事实。由于主题不是Java,我就不细说了。如果有人想讨论,请随意开始一个新主题。)Clojure 消除了其中许多障碍。

Lisp 可以在使用传统编程的任何地方使用。没什么不同,只是更强大。编写网络应用程序?你可以用 Lisp 来编写桌面应用程序吗?你可以在 Lisp 上完成它,无论如何,你可能可以在 Lisp、Python 或任何其他通用编程上完成它(有几种语言只适合一种任务)。

最大的障碍可能是你的老板、同事或客户的接受度。这是你必须与他们合作的事情。选择一个务实的解决方案,例如 克洛尤尔 可以利用 Java 基础设施的当前安装基础(从 JVM 到库)可能会对您有所帮助。另外,如果你有一个 Java 程序,你可能会做一个插件架构并为其编写 Clojure 插件,最终用 Clojure 编写一半的代码。

不是原因,但(微不足道)AutoCAD 具有 LISP 和 DCL 运行时支持。如果您不想使用 VBA 或其 C++ 或 .NET SDK,或者 DIESEL 表达式无法解决问题,那么这是编写复杂宏(包括 ActiveX 自动化)的便捷方法。

AutoCAD 的许多函数实际上都是 LISP 例程。

这是我自己思考了一段时间的话题,但我还没有真正做出决定,因为通常时间是主要问题......;)

由于到目前为止我在这篇文章中找不到这些链接,因此出于公共利益我添加了它们:

成功与失败的故事:JPL 的 Liping

真正令人印象深刻的成功故事:Orbitz 公司使用 Lisp

是否使用Lisp代替Java的对比分析:Lisp 作为 Java 的替代品

语法不重要,可读性不重要!

并不是说这是一个杀手级应用程序,但看起来它可能很酷http://code.google.com/p/plop/

杀手级应用程序?ITA Software 的航班搜索引擎就是其中之一。

至于“为什么”,它很可能会让你成为一名更好的开发人员,并且极不可能让你成为一名更糟糕的开发人员。然而,与其他语言相比,它可能会让您更喜欢 Lisp 方言。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top