Clojure遵循Common Lisp标准吗?

时间:2012-11-18 09:21:21

标签: clojure lisp standards common-lisp dialect

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

4 个答案:

答案 0 :(得分:16)

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

话虽如此,它与Common Lisp有很多共同之处,因此在一个中获得的知识通常适用于另一个。

许多重要的事情都是一样的:

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

有些不同的东西:

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

主观意见:我有偏见,但我认为对于大多数现代用法来说,如果你现在选择一个Lisp,Clojure肯定是要走的路 - 它是现代的重新设计Lisp拥有一个充满活力和创新的社区,是完成任务的务实选择。

答案 1 :(得分:4)

您不需要使用Common Lisp的方言。有很多优秀的Common Lisp实现 - 它们为Common Lisp提供了很多扩展。

对于使用Lisp的教育编程,我建议使用SBCL,它提供了一个出色的编译器。 CCL(Clozure Common Lisp)是另一个不错的选择。两者都在Linux和Mac OS X上运行得非常好。

有Common Lisp的方言(比如用于开发Cyc的SubL,一个基于知识的大型系统)和与Common Lisp相关的语言(如AutoCAD的Visual Lisp,GNU Emacs或ISLisp的Emacs Lisp),但在教育中使用它们是没有意义的。标准的Common Lisp实现很多,而且非常好。

Clojure 甚至不是Common Lisp的方言,它是一种不同的语言。

答案 2 :(得分:2)

Clojure是它自己的语言 - 不是Common Lisp语言的实现。所以它不遵循Common Lisp标准。

答案 3 :(得分:1)

我认为你教授的意思是,一些Common Lisp实现添加了许多不属于标准的额外功能,而你的教授不希望你使用这些功能。因此,选择您喜欢的任何Common Lisp实现,如SBCL或Clozure等,并且仅使用实际的Common Lisp函数,技术等,这些函数不是特定实现所特有的。换句话说,您编写的代码理论上应该在任何Common Lisp实现上运行。

Clojure,Scheme等是Lisp的其他方言,它们有自己的标准(适用时,“标准”一词具有不同程度的严格程度,取决于你的意思),与Common Lisp不同。也就是说,他们肯定不遵守Common Lisp标准。

坦率地说,在谈到Lisp语言时,“方言”通常指的是一种完全不同的Lisp语言,它与另一种方言没有相同的标准。因此,说“Common Lisp的不同方言”毫无意义。但是,你可以说,“不同的Lisp方言。”