clojure - Clojure、Scheme/Racket 和 Common Lisp 之间有什么区别?

标签 clojure lisp scheme common-lisp racket

我知道它们是同一个语系 lisp 的方言,但到底有什么区别呢?如果可能的话,您能否概述一下语法、特征、特性和资源等主题。

最佳答案

它们都有很多共同点:

  • 动态语言
  • Strongly typed
  • 编译
  • Lisp 风格的语法,即代码被编写为 Lisp 数据结构(形式),最常见的模式是函数调用,如:(function-name arg1 arg2)
  • 强大的宏系统,允许您将代码视为数据并在运行时生成任意代码(通常用于使用新语法“扩展语言”或创建 DSL)
  • 通常用于函数式编程风格,尽管有能力适应其他范例
  • 强调使用 REPL 进行交互式开发(即您在代码的运行实例中进行交互式开发)

Common Lisp 显着特点:

Clojure 与众不同的特点:

  • 最大的库生态系统,因为您可以直接使用任何 Java 库
  • 向量 [] 和映射 {} 作为标准列表 () 的标准 - 除了一般有用性矢量和 map 一些人认为这是一项创新,通常更具可读性
  • 更加强调不变性和惰性函数式编程,有点受 Haskell 的启发
  • 语言级别的软件事务内存支持的强大并发能力(值得关注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)

方案特色:

关于clojure - Clojure、Scheme/Racket 和 Common Lisp 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11223403/

相关文章:

macros - 使用宏时每次迭代后参数递增

python - 在 SimpleHTTPServer.py 中重定向浏览器?

scheme - Racket 方案 - 从流中删除重复的连续字符

scheme - MIT 方案中的分类器和变压器是什么?

macros - 在编写宏时,Clojure 的单一命名空间方法是否会以任何方式限制您?

clojure - 关于字符串来源的问题?

ubuntu - 客户端服务器 GUI 资源

for-loop - `for` 在此递归 Clojure 代码中如何工作?

java - 在Clojure中使用并发之前是否应该全面了解Java并发和线程模型等?

function - 结合 LISP 中的两个函数来原子化列表然后找到最大值?