我知道他们是同一种叫做lisp的语言家族的方言,但究竟有什么不同?如果可能的话,您能否提供一个概述,涵盖语法,特征,功能和资源等主题。Clojure,Scheme/Racket和Common Lisp之间有什么区别?
回答
他们都有很多的共同点:
- 动态语言
- Strongly typed
- 编译
- Lisp风格的语法,即代码写成一个Lisp的数据结构(形式)与最常见的模式是函数调用,如:
(function-name arg1 arg2)
- 强大的宏系统,允许您将代码视为数据并在运行时生成任意代码(通常用于ei “新语法扩展语言”或创建DSL)
- 虽然有能力容纳其他范例,但经常用于函数式编程风格
- 强调与REPL进行交互式开发(即,
- 一个功能强大的面向对象子系统(Common Lisp Object System)
- 也许是最好的编译器(Common Lisp是根据最快的Lisp:你的代码的运行实例)
Common Lisp的鲜明特色互动发展到http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html虽然没有在它更.....)
Clojure的鲜明特点:
- 最大的图书馆生态系统,因为你可以直接使用,除了标准的清单
()
用作标准的任何Java库 - 载体
[]
和地图{}
- 除了向量的一般有用性和映射一些人认为,这是一个创新,这使得一般更具可读性 - 更加重视不变性和懒惰函数编程,一定程度上受到启发哈斯克尔
- 强大的并发能力,通过软件事务内存在语言层面的支持(值得关注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey) 个
方案鲜明的特点:
- 可以说是最简单和最容易学习的Lisp
- 卫生宏(见http://en.wikipedia.org/wiki/Hygienic_macro) - 优雅避免宏展开与意外符号捕获的问题
这很好,但也许你应该提到球拍不仅仅是“公正”的计划;它是一个支持多种(但相关)语言的系统(甚至可以定义自己的语言)。此外,clojure有多种方式进行类似于oo的编程(包括多种调度方式,与clos类似,更接近于java的jvm方式)。并且计划正朝着更多标准库(也包括oo)加入r6rs,这是球拍所支持的。 –
嗯。我认为我在r6rs支持oo时错了,对不起。 –
不支持r6rs。 – soegaard
不要忘记Lisp-1和Lisp-2的差异。
Scheme和Clojure是Lisp-1:
这意味着变量和函数名都位于相同的名称空间中。
Common Lisp是Lisp-2:
函数和变量具有不同的名称空间(事实上,CL有许多名称空间)。上述
的人错过了一些东西
Common Lisp的有载体和哈希表,以及。不同之处在于Common Lisp使用#()作为向量,没有使用哈希表的语法。 Scheme有向量,我相信
Common Lisp有读者宏,它允许你使用新的括号(就像Racket,Scheme的后裔一样)。
计划和Clojure的有卫生宏,而不是Common Lisp中的不卫生那些
语言的全部是现代或有大规模的翻修工程。 Common Lisp在过去的五年中已经获得了大量的库(主要归功于Quicklisp),Scheme有一些现代化的实现(球拍,鸡,Chez Scheme等),并且Clojure最近被创建出来了。内置OO系统,尽管它与您可能使用的其他OO系统完全不同。值得注意的是,它不是强制执行的 - 你不用就可以用来编写OO代码。
这些语言有不同的设计理念。 Scheme被设计为理解Actor模型的最小方言;它后来被用于教育学。 Common Lisp旨在统一涌现出的无数Lisp方言。 Clojure是为并发而设计的。因此,Scheme具有最小和优雅的声誉,Common Lisp具有强大的功能和范式不可知性(功能,OO等等),而Clojure则支持函数式编程。
GIMP是写在方案:)
其实配发的软件,一些人认为可能是用C++编写可能是Lisp的保护伞下完成的,它很难挑选出金苹果出来的束。事实是C++并不总是很受欢迎,它似乎只是因为更新历史而流行起来。对于本世纪不到一半的人来说,C++甚至没有使用多线程,而今天Python已经成为了无用的未经测试的buggy胶水代码的地方。稍微快一点,现在我们看到了函数式编程的兴起,它更像是适应或死亡。就适应性而言,我认为Java是正确的。
Scheme旨在简化Lisp语言,这是它唯一的意图,除非它从未真正发现过。我认为Clojure做了类似的事情,它简化了JVM的Scheme。它就像其他所有JVM语言一样,只是为了夸大用户体验,只是为了简化Java领域的样板文件。
“意思是简化JVM的Scheme,就像每隔一个JVM语言一样,” “就是这样。” 是的,没错。 – oskarkv
- 1. Emacs Lisp和Common Lisp之间的主要区别是什么?
- 2. Lisp中1和'1之间有什么区别?
- 3. 在Lisp(Clojure,Emacs Lisp)中,list和quote有什么区别?
- 4. FUNCALL和#'function-name in common lisp有什么区别?
- 5. Common Lisp中的eq,eql,equal和equalp有什么区别?
- 6. Common Lisp中的原子和符号有什么区别?
- 7. Common Lisp中“flet”和“labels”有什么区别?
- 8. let *和set之间的区别?在Common Lisp
- 9. Common Lisp和Scheme中deftype之间的区别
- 10. Lisp/Clojure中的procedure和#程序有什么区别?
- 11. Scheme和Common Lisp之间的实际区别是什么? (或Lisp的任何其他两种方言)
- 12. Lisp中'和#'有什么区别?
- 13. postgresql-common和postgresql-contrib之间的区别
- 14. “层”和“层”之间有什么区别?
- 15. Tableau和QlikView之间有什么区别
- 16. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之间有什么区别?
- 17. @Entity和@embeddable之间有什么区别
- 18. ContentObservable和DataSetObservable之间有什么区别?
- 19. touchmove和gesturechange之间有什么区别?
- 20. :notification.flags和notification.defaults之间有什么区别?
- 21. proc和lambda之间有什么区别?
- 22. :: after和after之间有什么区别?
- 23. read()和io.read()之间有什么区别?
- 24. Request()和Request.Form()之间有什么区别?
- 25. WebServiceBinding.EmitConformanceClaims和WebServiceBinding.ConformanceClaims之间有什么区别?
- 26. getA()和this.getA()之间有什么区别?
- 27. (int)和intval()之间有什么区别?
- 28. set_value和= pandas之间有什么区别
- 29. * zoom和zoom之间有什么区别?
- 30. {0}和“”之间有什么区别?
我要求更全面地了解这些差异,因为我倒下了这个问题对许多其他人很有用,对不起,如果它听起来有辱人格的话。 – MaiaVictor
错误的网站。对于真正的编程问题,stackoverflow是最好的。请参阅常见问题解答:http://stackoverflow.com/faq#questions –
我总是会对哪个帖子应该去哪里感到困惑。这是对工具的讨论,对于这里或程序员来说这是一个问题吗?从逻辑上讲,我会说把它移动给程序员,因为它不是要求解决一个特定的问题,但这是一个很好的回答,恕我直言,恕我直言。 – octopusgrabbus