Clojure遵循Common Lisp标准吗?

Ile*_*ian 1 lisp standards clojure common-lisp dialect

我最近发现,如果它遵循Common Lisp标准,我可以在学校使用Lisp的任何方言进行函数式编程课程.Clojure是否遵循此标准?它太不一样了吗?

mik*_*era 16

Clojure不遵循Common Lisp标准 - 它是一个全新的Lisp.

话虽如此,它与Common Lisp共享很多东西,因此在一个中获得的知识通常适用于另一个.

许多关键的事情都是一样的:

  • 函数应用程序通过将函数放在列表的开头,后跟其参数:(my-function arg1 arg2)
  • "代码就是数据" - 代码以同音形式表示,也是Lisp数据结构
  • 两者都有一个强大的宏系统 - 你可以编写函数来生成任意代码
  • 它们是动态语言,
  • 两者都强调使用REPL进行交互式开发
  • 它们都是正常编译的

有些不同的东西:

  • Clojure更强调函数式编程 - 所有数据结构都是不可变的,核心库主要由"纯"函数组成.注意:你仍然可以在Common Lisp中使用一种功能风格,Clojure只是把它放在最前面
  • Clojure是一个Lisp-1(比如Scheme函数和数据共享相同的命名空间),而Common Lisp是一个Lisp-2(函数和数据有不同的命名空间)
  • 除了传统的Lisp列表之外,Clojure还为地图,向量和集合提供了新的文字{}[]#{}()
  • Common Lisp支持读取器宏 - 这使您可以更好地自定义语言的语法
  • Clojure有一种通过STM 管理并发性,身份和状态的新方法- 请参阅http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey
  • Clojure旨在"拥抱主机平台"(通常是JVM,但也是CLR,最近人们对通过ClojureScript定位JavaScript感兴趣) - 从实用的角度来看这很重要,因为它可以让你访问巨大的图书馆/工具数组.
  • 没有Clojure的标准 -它是一个BDFL驱动的语言,一个主要的开源实现.Rich Hickey是BDFL的极大帮助 - 这个人才是天才.

主观意见:我有偏见但我认为对于大多数现代用法来说,如果你现在选择Lisp,Clojure肯定是要走的路 - 它是Lisp的现代重新设计,拥有一个非常有活力和创新的社区,是一个务实的选择"把事情做好".