【问题标题】:Does Clojure follow the Common Lisp standard?Clojure 是否遵循 Common Lisp 标准?
【发布时间】:2012-11-06 11:53:54
【问题描述】:

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

【问题讨论】:

  • 根据定义,任何遵循 Common Lisp 标准的语言都 Common Lisp 吗?或者换句话说:Common Lisp 不是唯一遵循 Common Lisp 标准的语言吗?
  • 嗯,这就是我的教授告诉我的。 “它必须遵循那个标准”——我没有对标准是什么或是否有其他方言遵循这个标准进行任何研究。
  • @sepp2k 我很确定他指的是不同的 Common Lisp 实现,它们本身往往有足够的包袱被称为方言。
  • @Cubic:由于不同的 Common Lisp 实现都实现了 ANSI 标准,它们并不是真正的方言。由于有大量的扩展,它们是 Common Lisp 的扩展版本。但是有几种 Common Lisp 方言实现,它们通常提供 Common Lisp 的子集或基于 Common Lisp。通常,这些方言是为某些应用程序实现的,作为实现或扩展语言。例如 Interleaf Lisp、L、SubL、XLisp 的第二个版本、ThinLisp、...)。

标签: clojure lisp standards common-lisp dialect


【解决方案1】:

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

话虽如此,它与 Common Lisp 有很多共同之处,因此从其中获得的知识将普遍适用于另一个。

很多关键的东西都是一样的:

  • 函数应用,将函数放在列表的开头,后跟其参数:(my-function arg1 arg2)
  • “代码就是数据” - 代码以 homiconic 形式表达,这些形式也是 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 driven 语言,具有一个主要的开源实现。 Rich Hickey 是 BDFL 非常有帮助 - 他是个天才。

主观意见:我有偏见,但我认为对于大多数现代用途来说,如果你现在选择 Lisp,Clojure 绝对是要走的路——它是对 Lisp 的现代重新设计,具有非常充满活力和创新的社区,是“把事情做好”的务实选择。

【讨论】:

  • clojure-clr 还活着吗?我认为里奇已经放弃了它,因为他厌倦了总是两次做同样的事情。他改变主意了吗?
  • 我的理解是,有些人仍在研究它 - 但是 JVM 版本的 Clojure 和 ClojureScript 绝对是大部分工作正在进行的地方。
【解决方案2】:

您不需要使用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 的方言,它是一种不同的语言。

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 还有其他遵循 Common Lisp 标准的 lisp 吗?这个问题是否正确?
    • Common Lisp 标准有多种实现方式。但是,我不会将它们称为其他语言,而是将其称为同一语言的实现。正如我在之前的评论中指出的那样,我想说任何实现 Common Lisp 标准的语言都是 Common Lisp。
    【解决方案4】:

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

    Clojure、Scheme 等是 Lisp 的其他方言,它们有自己的标准(如果适用,“标准”一词根据您的意思有不同程度的严格性),与 Common Lisp 不同。也就是说,他们肯定不遵守 Common Lisp 标准。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-24
      • 2015-06-04
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多