136

我知道它们是同一个语言家族的方言,称为 lisp,但究竟有什么区别?如果可能的话,您能否给出一个概述,涵盖诸如语法、特征、特性和资源等主题。

4

4 回答 4

113

他们都有很多共同点:

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

Common Lisp 的显着特点:

Clojure 显着特点:

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

方案显着特点:

于 2012-06-27T10:07:29.310 回答
57

上面的人错过了一些东西

  1. Common Lisp 也有向量和哈希表。不同之处在于 Common Lisp 使用 #() 表示向量,而没有使用哈希表的语法。方案有向量,我相信

  2. Common Lisp 有阅读器宏,允许您使用新的括号(Racket 也是如此,Scheme 的后代)。

  3. Scheme 和 Clojure 有卫生的宏,而不是 Common Lisp 的不卫生的宏

  4. 所有的语言要么是现代的,要么有广泛的翻新项目。Common Lisp 在过去五年中获得了大量的库(主要归功于 Quicklisp),Scheme 有一些现代实现(Racket、Chicken、Chez Scheme 等),而 Clojure 是最近才创建的

  5. Common Lisp 有一个内置的 OO 系统,尽管它与您可能使用过的其他 OO 系统完全不同。值得注意的是,它不是强制的——您不必编写 OO 代码。

  6. 这些语言有一些不同的设计理念。Scheme 被设计为理解 Actor 模型的最小方言;它后来被用于教学。Common Lisp 旨在统一大量涌现的 Lisp 方言。Clojure 是为并发而设计的。因此,Scheme 以简洁和优雅而著称,Common Lisp 以强大且与范式无关(函数式、OO 等)而著称,而 Clojure 则以支持函数式编程而著称。

于 2012-09-16T05:48:51.197 回答
41

不要忘记 Lisp-1 和 Lisp-2 的区别。

Scheme 和 Clojure 是 Lisp-1:
这意味着变量和函数名称都驻留在同一个命名空间中。

Common Lisp 是 Lisp-2:
函数和变量有不同的命名空间(其实 CL 有很多命名空间)。

于 2012-06-28T10:41:11.487 回答
-7

Gimp 是用 Scheme 编写的 :)

事实上,一些人认为可能用 C++ 编写的软件的分配可能是在 Lisp 的保护伞下完成的,很难从一堆中挑选出金苹果。事实上,C++ 并不总是很流行,它只是在今天才流行起来,因为它有更新的历史。在本世纪下半叶,C++ 甚至没有使用多线程,它是 Python 今天成为无用的未经测试的错误胶水代码的污水池的地方。快进一点,现在我们看到函数式编程的兴起,它更像是适应或死亡。我认为就适配部分而言,Java 是正确的。

Scheme 旨在简化 Lisp 语言,这是它的唯一目的,只是它从未真正流行起来。我认为 Clojure 做了类似的事情来简化 JVM 的方案。就像其他所有 JVM 语言一样,它只是为了提升用户体验,只是为了简化 Java 领域的编写样板。

于 2016-02-24T03:41:42.023 回答