我知道它们属于同一语系的方言,叫做 lisp,但是它们到底有什么不同呢?如果可能的话,您能否给出一个概述,包括语法、特征、特性和资源等主题。
它们都有很多共同点:
(function-name arg1 arg2)
Common Lisp 的显著特点:
Clojure 的显著特点:
[]
{}
()
计划特色:
不要忘记 Lisp-1和 Lisp-2的区别。
Scheme 和 Clojure 是 Lisp-1: 这意味着变量名和函数名都驻留在相同的命名空间中。
Common Lisp 就是 Lisp-2: 函数和变量有不同的名称空间(实际上,CL 有许多名称空间)。
上面的人漏掉了一些东西
Common Lisp 也有矢量和散列表。区别在于 Common Lisp 对矢量使用 # () ,而对散列表没有语法。我相信计划有向量
Common Lisp 有读宏,允许使用新的括号(就像 Scheme 的后代 Racket 一样)。
Scheme 和 Clojure 有卫生的宏,而 Common Lisp 有不卫生的宏
所有的语言要么是现代的,要么有广泛的改造项目。Common Lisp 在过去的五年中得到了广泛的库(主要归功于 Quicklisp) ,Scheme 有一些现代的实现(Racket、 Chicken、 Chez Scheme 等) ,而 Clojure 是最近才创建的
Common Lisp 有一个内置的面向对象系统,尽管它与您可能使用过的其他面向对象系统有很大的不同。值得注意的是,它并没有强制执行——您不需要 有来编写 OO 代码。
这两种语言的设计理念略有不同。Scheme 被设计成理解演员模型的最小方言,后来被用于教学。Common Lisp 被设计用来统一出现的大量 Lisp 方言。Clojure 是为并发性而设计的。因此,Scheme 有着极简和优雅的美誉,Common Lisp 有着强大的功能和范式无关性(函数式、面向对象等等) ,而 Clojure 有着支持函数式编程的美誉。
Gimp 是用 Scheme:)编写的
事实上,很多人认为可能是用 C + + 编写的软件很可能是在 Lisp 的保护伞下完成的,很难从中找出金苹果。事实上,C + + 并不总是流行,它之所以流行是因为它有更新的历史。在这个世纪的后半叶,C + + 甚至没有利用多线程,而是让 Python 成为了一堆没有用的、未经测试的错误粘合代码。稍微快进一点,现在我们看到函数式编程的兴起,它更像是适应或者死亡。我认为 Java 在适应部分是正确的。
Scheme 的设计目的是简化 Lisp 语言,这是它唯一的意图,除了它从来没有真正流行起来。我认为 Clojure 做了一些类似的事情,仅仅是为了简化 JVM 的 Scheme。它就像其他任何 JVM 语言一样,只是为了增加用户体验,只是为了简化 Java 中的编写样板文件。