【问题标题】:Is learning LISP useful at all these days? [closed]这些天学习 LISP 有用吗? [关闭]
【发布时间】:2010-12-09 12:58:20
【问题描述】:

前几天我在旧货拍卖会上买了一本 LISP 书,只是想知道是否值得花一些时间阅读。

【问题讨论】:

  • 我做过的最好的事情就是偶然发现了 LISP。它以一种“骑自行车”的方式让我大开眼界,它的影响存在于我从那时起编写的所有程序中。祝阅读愉快!
  • 很多相关答案都在这里:programmers.stackexchange.com/q/55284/15028

标签: lisp


【解决方案1】:

是的。在这里,我将坚持使用 Common Lisp,尽管 Scheme 也是一种极好的语言,有很多值得推荐的地方。

在 Common Lisp 中,您有一个较大的多范式语言,它提供了一些在 Lisp 语言家族之外不广泛存在的东西,或者仅限于 CL 甚至更晦涩/小众语言。

您可以从 CL、Scheme 和许多其他方言中以某种方式获得的第一个功能是一个真正的宏系统。

我说“真实”是因为系统比 C 预处理器宏更完整、更灵活、更可靠。让 CPP 宏以可靠的方式做一些简单的事情(比如交换两个变量的值,或者创建 foreach 构造)是非常困难的,但是这些对于 Lisp 宏来说是微不足道的。事实证明,这是一个非常强大的工具,可以引入新的抽象并消除“样板”代码。

第二个功能实际上仅限于 Common Lisp,是 CLOS,即 Common Lisp 对象系统。尽管有这个名字,但它不是像 Java 那样的传统 OO 系统,方法是类定义的一部分。相反,它通过附加方法的“通用函数”提供多态性,并且默认情况下允许您进行多次分派。

我非常喜欢 CLOS,而不是更常见的面向对象方法,因为它使许多“模式”(如访问者模式)完全不必要,而且现有泛型函数的扩展非常容易;其他人讨厌它,因为它采用了一种极其随意的封装方法,而且泛型函数的扩展可以说是太容易了。无论哪种方式,CLOS 都足够不同,我认为仅仅因为它提供的不同视角就值得学习。

第三个功能是动态的交互式编程,它在 Lisp 之外可用,但如果您以前从未体验过它,它仍然很棒。 CL 调试器往往是非常强大的工具,CL 提供了函数、类和方法的动态定义和重新定义,所有这些都极大地提高了探索问题、测试该问题及其子问题的解决方案的能力,并最终将一个正确有效地运行的程序。

最后,对于很多类别的问题,Lisp 是一种非常实用的语言。它提供了良好的性能(通常不如 C 快,但比大多数“脚本语言”快得多)、安全性、自动内存管理、体面的函数“标准库”以及易于扩展的巨大机会。

【讨论】:

  • 我最喜欢的是 Lisp 编程的交互性。我每天都在利用这一点。
  • 我一直在网上看SICP的书,我认为Scheme只是LISP的一个实现
  • Technically Common Lisp 和 Scheme 都是 McCarthy 的 LISP 的方言。但今天,“LISP”是前者的简写。
  • grettke:不,“Lisp”是简写。
【解决方案2】:

出于“思维扩展”的目的值得学习,但如今在构建应用程序方面并不那么流行。

但是,它功能强大且成熟,并且有快速且免费的编译器。因此,如果您愿意,没有理由不选择它。

Lisp 以同样的方式处理数据结构和程序结构的方式提供了令人惊叹的功能,值得理解。

它的历史令人着迷,它塑造了计算机科学的世界。

请务必在 MIT OpenCourseware 上查看 Ableson 和 Sussman 的 Structure and Interpretation of Computer Programs

Clojure: a Lisp on .NET and Java VMs

GNU CLISP.

CMU Common Lisp

【讨论】:

  • CMUCL 不再更新太多。我会坚持使用 SBCL,除非有理由使用旧版本。
  • 这不是真的。 SBCL 比 CMUCL 更活跃,但 CMUCL 被积极维护。就在三周前,CMUCL 20a 发布了一个新的主要版本。 CMUCL 也有每月的快照版本。
  • “CMUCL 没有更新太多”和“SBCL 更活跃”之间到底有什么区别? :-) 你说,( b a)...
【解决方案3】:

取决于书。哪本书?

Common Lisp 今天值得学习,因为它是为数不多的几乎“无所不能”的语言之一。如果有一些主流或晦涩的编程习惯用法或技术,Common Lisp 很可能已经以某种形式拥有它。 CL 唯一缺少的就是延续(许多人认为它不需要它们,但如果你想探索它们,那将无济于事)。

任何花费大量时间在 Common Lisp 中写作的人都会以某种方式改变,通常是为了更好,恕我直言。

即使您无法将学习和使用的所有 Lispy 概念带到其他环境中,了解它们以及它们的工作方式仍然很有用。

【讨论】:

  • 好吧,CL 有定界延续。甚至还有围绕它们构建的网络框架。
【解决方案4】:

优秀的程序员尽可能多地接触不同的编程范式,而不是尽可能多的编程语言。

LISP 系列(有多种变体)非常值得了解。你的目标应该是让你的头脑围绕函数式编程和 lambda 演算——LISP 所基于的范式。减少对成为“王牌”LISP 程序员的关注(这可能需要数年时间)。

如果您发现函数式编程“翻转开关”,请尝试查看 PROLOG - 这里的范例是基于对 Horn 子句(谓词逻辑)的评估。

在过去的 20 年里,我可能一直以 COBOL 程序员为生(天哪,他们仍然拥有这些!),但我认为我是一个更好的程序员,因为我花了很多时间学习 LISP 和其他一些编程语言真的很重要。

玩得开心……

【讨论】:

    【解决方案5】:

    这是一个值得关注的 Google 技术讲座,内容是关于一家目前使用 Common Lisp 为航空业生产大型复杂软件的公司:

    Lisp for High-Performance Transaction Processing(视频现在不可用。Here 是 Zach Beane 的一些笔记。)

    该视频中提到了其他主题,包括 Clojure,它是用于 JVM 的 Lisp 的新变体(现在正在为 CLR 开发 Clojure 的一些工作,但还没有那么远),值得检查解决并发问题的方式。请参阅 Clojure 网站:

    http://clojure.org/

    首先,请查看该页面右上角的链接,这些链接指向一些优秀的截屏视频,其中概述了并发问题和 Clojure 功能。

    如果你对 Lisp 感兴趣,但你发现的书不是很好(我自己有一本旧书,对我没有多大帮助),可以使用 Paul Graham 的书On Lisp在http://www.paulgraham.com/onlisp.html 免费,非常好。通用 Lisp 或 Scheme 或 Emacs Lisp 或 Clojure 的一般 Lisp 想法是相同的,但具体情况会有所不同 - 因此,如果阅读 Graham 的书,主要关注 Common Lisp(其中提到了一些 Scheme 细节),请记住这一点。 On Lisp 可能不是最好的初学者书籍,但值得一读,只是略读一下你还没有准备好详细了解的细节,看看那里有什么,特别是关于宏, On Lisp 真正探索的。

    【讨论】:

      【解决方案6】:

      Lisp 的一个好处是,您可以培养对前缀的欣赏,并想知道为什么世界上的其他人也不使用它(例如 Latex 或 vim)

      + 1 2 3 4 5 6 7 8 9
      

      比

      更容易编码/编辑/粘贴
      1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
      

      【讨论】:

      • 高效的复制粘贴其实是我从没想过的一个方面 ;-) 但是“(1 to:9) sum”怎么样
      • @blabla999 我更多的是从实际角度思考,比如计算器。我不明白为什么人类不去“等一下,让加号运算符以某种方式应用于后面的一切难道没有意义吗?”
      【解决方案7】:

      请参阅this 问题,尤其是第三个答案,它解释了 Lisp 擅长解决复杂问题,如果您尝试用另一种语言解决这些问题,这些问题很难分解成更易于管理的模块.换句话说,如果你热衷于探索解决复杂问题的方法,比如自然语言处理或知识聚合......那么,是的,Lisp 可能对你有用。

      【讨论】:

        【解决方案8】:

        学习 lisp 以了解宏,而代码就是数据,并了解您可以在没有 C++ 的自我鞭笞的情况下获得启蒙。

        学习 Common Lisp 以了解阅读器宏和编译器宏。我不知道有它们的任何其他语言。

        了解延续计划。

        学习 Clojure,因为它会让 Java 过时:-)

        【讨论】:

        • 现在是 2016 年,Java 仍然很强大,而 Clojure 仍然晦涩难懂...... 7 年后将再次重温
        【解决方案9】:

        它 (Common Lisp) 仍然被人工智能领域的学者大量使用。 Scheme 是一种类似 Lisp 的语言,也被许多(大多数?)CS 部门使用。我个人认为无论你最终是否使用 Lisp,学习 Lisp 都是值得的。这是一门经典语言,随着时间的推移,我们从中学到了很多东西。

        【讨论】:

        • 你能举一些Common Lisp的例子吗?我唯一认识的人是在南加州大学/信息科学研究所与 Kevin Knight 一起工作的人。
        • UT 的 Gordon Novak 在他教授的两个入门级课程(课程指定 Java)中都使用 Lisp:cs.utexas.edu/~novak
        【解决方案10】:

        学习 LISP 是有效学习函数式编程的好方法,通常用作本科生的入门语言。很多人觉得Structure and Interpretation of Computer Programs使用了Lisp的Scheme方言,是一本每个程序员书架上都应该有的书。

        Paul Graham 一直是 Lisp 的 big proponent,在他的书 Hackers and Painters 中,他描述了他如何利用 Lisp 的力量在为 Yahoo Stores 创建 ViaWeb 的竞争中占据主导地位。

        在其他地方,我看到 Lisp 方言在航空航天工业中被广泛使用,作为 Comet 和 AML 等集成框架的脚本工具。 Lisp 将始终与 1950 年代早期的 AI 实验联系在一起。

        【讨论】:

          【解决方案11】:

          正如其他人所暗示的那样,Lisp 在一般编程中不再那么流行,而且它肯定(IMO)在编写实际系统时存在一些主要问题,但当然其他人不同意(例如 ITA 的大部分软件都是编写的在 Lisp 中,他们创造了疯狂的银行)。

          即使你从未用 Lisp 编写过“真正的”程序,它也绝对值得学习。最初在 Lisp 中开创了许多编程技术,了解它们将帮助您在 Python、Perl、Ruby、ML、Haskell 甚至 C++ 中编写更好的代码。例如,查看Higher Order Perl,它展示了如何在 Perl 中完成各种惊人的技巧;引用引言“我不会告诉你 Lisp 有多棒,我会告诉你 Perl 有多棒,到最后你不必了解任何 Lisp,但你会更多地了解 Perl。[... ] 然后你就可以停止在 Perl 中编写 C 程序了。我想你会发现这是一个不错的改变。Perl 在 Perl 方面比在 C 的慢版本方面要好得多。"

          还有一些使用 Lisp 的好书,如果你了解 Lisp 语言,就会更容易理解它们 - SICP、Norvig 的 Paradigms of Artificial Intelligence Programming 和 The Reasoned Schemer 都是必读的。

          【讨论】:

            【解决方案12】:

            这里有些人推荐 Clojure。虽然我会说 Lisp 总体上是好的,但我会警告 Clojure,至少对于初学者来说是这样。这并不是因为使用 Clojure 有任何困难,只是因为 Clojure 与 Common Lisp 和 Scheme 无缘无故地不一致。如果您想要 JVM 集成,请使用 Armed Bear Common Lisp:https://common-lisp.net/project/armedbear/,但对于一般用途,我会推荐 Steel Bank Common Lisp:http://www.sbcl.org/

            【讨论】:

            • 无故不一致有什么关系?
            【解决方案13】:

            这就像在质疑“这些天的网络编程是否值得学习 C?”。只有你可以决定它是否值得。你要问自己的是:我读这本书的目的是什么?

            学习新语言有时在实用的意义上没有用(也许你一辈子都不会使用 LISP),但从长远来看它会因为您不太熟悉的不同范式获得了知识,因此很有用 - 而且您可以在今天已经使用的内容中使用您学到的一些知识。

            【讨论】:

            • 我会在您的第二段中强调“有时”。学习新语言有时在实际意义上没有用,但有时是很有用。我发现,当我学习一门新语言时,我经常会开始在意想不到的地方看到它的潜在用途。获取不同范例的知识并获得使用不同工具(包括不同语言)的技能,从根本上说是现代软件工程师的一项非常实用的技能。
            • 我所说的实用是有时人们想学习其他语言作为我们在开发中遇到的许多问题的“灵丹妙药”,例如“我将在所有项目中学习这种语言我有,它会解决一切”,也许 LISP 不会这样,也许他永远不会在里面写一行。但是他在阅读 LISP 时学到的东西可以帮助他解决职业生涯中其他领域的问题……和你一样的 POV。对不起,如果我没有说得更清楚,我每天都在努力用我的英语技能少吸点东西。 :)
            【解决方案14】:

            从大学毕业已经有一段时间了,但是在我参加了需要学习 Lisp 和编写 Lisp 程序的第三年 CS 课程之后,递归地编写和思考变得轻而易举。并不是说我在课程之前遇到递归问题,而是之后,这是第二自然。我在课程中也使用了CLOS(多伦多大学),但是太久远了,我几乎不记得我做了什么。

            【讨论】:

            • York 的 AI 课程有一个逻辑编程课程作为先决条件,那门课程是 LISP 和 Prolog(AI 课程最终是 Java 和 Prolog,但其他学期都是 LISP)。那不是很久以前(大约 6 年)。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-08
            • 2010-11-05
            • 1970-01-01
            • 1970-01-01
            • 2010-10-31
            • 2011-05-29
            相关资源
            最近更新 更多