我知道它们是同一个语系 lisp 的方言,但到底有什么区别呢?如果可能的话,您能否概述一下语法、特征、特性和资源等主题。
最佳答案
它们都有很多共同点:
- 动态语言
- Strongly typed
- 编译
- Lisp 风格的语法,即代码被编写为 Lisp 数据结构(形式),最常见的模式是函数调用,如:
(function-name arg1 arg2)
- 强大的宏系统,允许您将代码视为数据并在运行时生成任意代码(通常用于使用新语法“扩展语言”或创建 DSL)
- 通常用于函数式编程风格,尽管有能力适应其他范例
- 强调使用 REPL 进行交互式开发(即您在代码的运行实例中进行交互式开发)
Common Lisp 显着特点:
- 强大的 OOP 子系统 ( Common Lisp Object System )
- 可能是最好的编译器(根据 http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html,Common Lisp 是最快的 Lisp,尽管其中的内容不多......)
Clojure 与众不同的特点:
- 最大的库生态系统,因为您可以直接使用任何 Java 库
- 向量
[]
和映射{}
作为标准列表()
的标准 - 除了一般有用性矢量和 map 一些人认为这是一项创新,通常更具可读性 - 更加强调不变性和惰性函数式编程,有点受 Haskell 的启发
- 语言级别的软件事务内存支持的强大并发能力(值得关注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)
方案特色:
- 可以说是最简单易学的 Lisp
- 卫生宏(参见 http://en.wikipedia.org/wiki/Hygienic_macro)- 优雅地避免了宏扩展中意外符号捕获的问题
关于clojure - Clojure、Scheme/Racket 和 Common Lisp 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11223403/