代码之家  ›  专栏  ›  技术社区  ›  Humphrey Bogart

我应该学哪种方言?[关闭]

  •  79
  • Humphrey Bogart  · 技术社区  · 16 年前

    我知道口齿不清有几种不同的方言。在决定学习Lisp将是一种新的智力体验之后,我想知道学习哪种Lisp方言,以及为什么要学。

    有比其他的更受欢迎的吗?是否有任何一个更“完整”,如中所述,有更好的文档记录和支持?这种方言的优点和缺点是什么?

    9 回复  |  直到 11 年前
        1
  •  76
  •   cjs    7 年前

    你想在简洁和整洁之间寻找一个平衡点,吸引人的特性,以及一个平台,让你可以(为自己)编写有趣而有用的软件,同时也可以作为学习工具。(最后一个可以让你继续学习更长时间。)以下是一些可能性:

    1. 计划。 可能是所有方言中最干净的。这无疑是为什么 The Little Schemer 从LISP转换成Scheme。第五个方案标准规范, R5RS PLT Scheme (现在的Racket)平台包含了一个相当不错的解释器和编译器,非常适合编写脚本,而且还有一些可视化工具,使它非常适合学习。

    2. 可能是最可移植和最全面的变体,如果你想写一些东西,比如商业软件,这很可能是你想要的。该标准定义了大量的库,除此之外还有更多可用的库 CLOS

    3. 克洛朱尔。 这是在JVM上运行的,这可能会给Java开发人员提供支持。它有一些缺点(例如,您必须显式地请求tail call优化,但是如果将TCO添加到JVM中,这可能会有一天发生变化)。这些宏虽然不卫生,但确实有一些特性可以帮助您避免变量捕获,因此如果您真的想捕获变量,那么您可以在不小心的情况下比在CL中捕获变量的风险更小。您可以轻松地访问所有的Java库;对于“真实世界”代码来说,这可能是一件好事,而且在学习方面也相当没有意义。它有一组用于持久数据结构的库和对STM的支持,这使得它从并发的角度来看非常有趣;如果您有兴趣学习更多关于处理并发和并行编程的新方法,那么它可能是您的最佳选择。看起来Clojure和Java一样适用于大型的生产应用程序,从某种意义上说,它将能够完成您在生产应用程序中所做的“丑陋的事情”,而这些事情在您学习时是不愿意做和不愿意做的。

    4. Emacs Lisp。 就LISP而言,这不是一个更好的例子。它最大的缺点之一是动态范围界定,但还有许多其他缺点。但是,如果您是Emacs用户,这可能是您可以学习到的最强大的工具,以改进编辑器的使用。但是,除了如何扩展Emacs之外,从学习Emacs Lisp中学到了多少,对我来说是一个开放的问题;我不知道在Emacs Lisp中真正使用诸如高阶函数之类的有趣技术的频率。

    从我写这篇文章到现在已经将近十年了,Lisp语言家族现在似乎在普通程序员意识中获得了显著的吸引力。这其中大部分似乎与Clojure有关,Clojure不仅本身已经成为Lisp的一个单独的方言,引入了许多自己的好主意,而且现在已经有了一个几乎完全相同的JavaScript版本,并激发了许多其他针对其他平台的Lisp。例如, Hy 以CPython AST和字节码为目标,首先目标是实现与Python的互操作性,但在“有疑问时”使用Clojure思想(尽管从最新的提交中来看,后者可能会有一些变化)

    这给你的决策过程带来的一个重大变化是,你还应该研究任何一种Lisp或类似Lisp的语言可以使用,并且可以与你已经使用的语言或平台进行互操作,是吗 Perl , Ruby , Erlang , Go 甚至是 C++ on microcontrollers .

        2
  •  22
  •   J. Polfer    16 年前

    我会说这个计划,完全是因为 Little Schemer

        3
  •  9
  •   benekastah    13 年前

    我可以推荐Common Lisp SBCL . 这种组合速度快、功能强大、成熟且有很好的文档记录。

        4
  •  8
  •   dnolen    16 年前

    另外,Clojure最近也获得了很多的关注,这是有原因的。优秀的数据结构,非常好的并发支持(在这方面让Scheme和CL蒙羞),以及一个伟大的社区。它也相对简单,CL至少和C++一样复杂。

        5
  •  5
  •   jrockway    16 年前

    我更喜欢CL,因为我喜欢面向对象编程,而CLOS是最好的对象系统。

        6
  •  5
  •   Svante    16 年前

    我学会了 Scheme

    Why MIT switched from Scheme to Python 在其编程入门课程中。

        7
  •  3
  •   justinhj    16 年前

    例如Scheme有延续,学习Scheme中的延续是很好的,尽管它们可以在公共Lisp中实现。

    学习词法和动态范围之间的区别是很重要的,如果你同时学习了通用的Lisp和elisp,你会发现两者的含义。

        8
  •  0
  •   user235273 user235273    11 年前

    LFE(Lisp风味的Erlang)会很好。您可以在erlangvm上使用lisp语法。

        9
  •  0
  •   Wiley    11 年前

    一开始是一个“加载”的问题,但OP可能不知道。一般来说,普通的和计划的李斯特就像个人电脑和苹果电脑的“人”,他们不会混为一谈。哪一个是最好的,可能并不像哪一个对你“有用”那么重要。真的,没有那么大的区别。很可能你对其中一个的偏好可能会受到你先学哪一个的影响。(对我来说,空列表应该是“无”,在CL中称为NIL,这使我成为一个普通的Lisper。)我喜欢使用EMACS将SBCL与Slime集成,但SBCL并不适合所有人。首先,SBCL非常严格。如果你只想“玩得开心”,gnuclisp很简单,几乎每个平台都可以使用。