方案与 Lisp ?学什么,我需要函数式编程的语言。
3 回答
我认为客观地说,Scheme 在名称和约定方面更加一致和对称。简单的例子:真假是#t 和#f,而不是Lisp 中的T 和nil。这样的细节会破坏交易吗?当然不是。但是,在早期,你必须记住的奇怪的例外越少,你就越不会从重要的事情上分心。
虽然你可以在 Scheme 中使用递归,但你也可以做一些闻起来不像递归的事情——比如非常流行的 named-let 习惯用法,每个人似乎都把它命名为 `loop': (let loop () .. .)——甚至是显式的循环结构。
与 CL 一样,Scheme 不会强迫您具有功能性或不可变性。但是,如果您来自命令式背景,那么推动并最终让它“点击”您编写事物的方式而不为变量重新分配值是值得的。但是,如果您不想要那种灯泡体验,请随意设置!事情势在必行。
我建议您从 Scheme 开始,更具体地说,从 Racket(以前的“PLT Scheme”)开始。它带有一个很棒的 IDE、非常好的文档和一个非常有用的邮件列表。它的库可让您编写真实世界的程序,以及通过 SICP 或 HtDP 等优秀书籍进行工作。
已经在这里回答了 SO:Comparison Lisp vs Scheme
Vinko Vrsalovic的最佳答案:
如果您过去使用过 Lisp,您可能对“Lisp”是什么有一些想法,而这与 Common Lisp 关系不大。虽然 Common Lisp 取代了它所衍生的大部分方言,但它并不是唯一剩下的 Lisp 方言,而且根据您接触 Lisp 的地点和时间,您很可能已经学习了其中一种其他方言。
除了 Common Lisp,仍然拥有活跃用户社区的通用 Lisp 方言是 Scheme。Common Lisp 借鉴了 Scheme 的一些重要特性,但从未打算取代它。
最初是在 MIT 设计的,在那里它很快被用作本科计算机科学课程的教学语言,Scheme 一直针对与 Common Lisp 不同的语言领域。特别是,Scheme 的设计者专注于保持核心语言尽可能小和简单。这对于教学语言以及希望能够正式证明有关语言的事情的编程语言研究人员都有明显的好处。
它还有一个好处是可以相对容易地理解标准中指定的整个语言。但是,这样做的代价是忽略了许多在 Common Lisp 中标准化的有用功能。单独的 Scheme 实现可能以特定于实现的方式提供这些特性,但是标准中省略它们使得编写可移植的 Scheme 代码比编写可移植的 Common Lisp 代码更难。
Scheme 也比 Common Lisp 更强调函数式编程风格和递归的使用。如果你在大学里学过 Lisp,但留下的印象是它只是一门学术语言,没有实际应用,那么你很可能学过 Scheme。这并不是说这是对 Scheme 的一个特别公平的描述,但它更不适用于 Common Lisp,它被明确设计为一种现实世界的工程语言,而不是一种理论上的“纯”语言。
如果你学过 Scheme,你还应该知道 Scheme 和 Common Lisp 之间的一些细微差别可能会让你感到困惑。这些差异也是Common Lisp 和Scheme 社区中的狂热分子之间多次长期宗教战争的基础。在我们进行过程中,我将尝试指出一些更重要的差异。
另外两种仍在广泛使用的 Lisp 方言是 Elisp,Emacs 编辑器的扩展语言,以及 Autolisp,Autodesk 的 AutoCAD 计算机辅助设计工具的扩展语言。尽管 Elisp 和 Autolisp 的行数可能比任何其他 Lisp 方言都多,但两者都不能在其宿主应用程序之外使用,而且与 Scheme 或 Common Lisp 相比,它们都是非常老式的 Lisp。如果您使用过其中一种方言,请准备跳进 Lisp 时间机器并向前跳跃数十年。
我建议方案。它相当简单且纯功能。CL 庞大、复杂且更难学习,它支持多种范式,如果您想要将语言严格用于函数式编程,您将不会使用它的大部分功能。