lisp - 这年头学LISP有用吗?

标签 lisp

<分区>

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

最佳答案

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

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

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

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

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

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

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

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

关于lisp - 这年头学LISP有用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1614724/

相关文章:

lisp - 具有重复参数的拼接列表的有效评估

Clojure:迭代集合图

scheme - 关于Scheme中的引号(')

java - Java 是否支持像 Lisp 那样基于多个对象的类型分派(dispatch)到特定的实现?

programming-languages - 你知道有一种语言在代码是数据的地方进行静态类型检查吗?

recursion - 线性递归与线性迭代过程 (LISP)

functional-programming - 如何在Scheme/Lisp中添加结构体的元素

lisp - 如何使用任意数量的参数在 lisp 中定义结构?

objective-c - 我如何真正用 NSNumbers 做数学? (在 obj-c 中实现 lisp)

macros - Elisp递归宏