我知道他们是同一个语言家族的方言,称为lisp,但究竟是什么区别呢?如果可能,您是否可以概述语法,特征,功能和资源等主题 .
他们都有很多共同之处:
动态语言
Strongly typed
已编译
Lisp风格的语法,即代码被编写为Lisp数据结构(表单),最常见的模式是函数调用,如: (function-name arg1 arg2)
(function-name arg1 arg2)
功能强大的宏系统,允许您将代码视为数据并在运行时生成任意代码(通常用于使用新语法"extend the language"或创建DSL)
常用于函数式编程风格,虽然有能力容纳其他范例
使用REPL强调交互式开发(即您在代码的运行实例中交互式开发)
Common Lisp的特色:
强大的OOP子系统(Common Lisp Object System)
可能是最好的编译器(根据http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html,Common Lisp是最快的Lisp,尽管它没有多少......)
Clojure与众不同的特点:
最大的图书馆生态系统,因为您可以直接使用任何Java库除了标准列表 () 之外,
()
向量 [] 和 Map {} 用作标准 - 除了向量和 Map 的一般有用性之外,有些人认为这是一种通常更具可读性的创新
[]
{}
更加强调不变性和懒惰的函数式编程,有点受Haskell的启发
语言级软件事务内存支持的强并发功能(值得关注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)
方案特色:
可以说是最简单易学的Lisp
卫生宏(参见http://en.wikipedia.org/wiki/Hygienic_macro) - 优雅地避免了宏扩展中意外符号捕获的问题
上面的人错过了一些事情
Common Lisp也有向量和哈希表 . 不同之处在于Common Lisp对向量使用#()而对哈希表没有语法 . 我相信Scheme有矢量
Common Lisp具有读取器宏,允许您使用新的括号(如Racket,Scheme的后代) .
Scheme和Clojure有卫生的宏,而不是Common Lisp的不卫生的宏
所有语言都是现代语言或有大量的翻新项目 . Common Lisp在过去五年中获得了大量的库(主要归功于Quicklisp),Scheme有一些现代实现(Racket,Chicken,Chez Scheme等),而Clojure是最近创建的
Common Lisp有一个内置的OO系统,虽然's quite different from other OO systems you might have used. Notably, it is not enforced--you don' t必须写OO代码 .
语言有一些不同的设计理念 . Scheme被设计为用于理解Actor模型的最小方言;它后来被用于教育学 . Common Lisp旨在统一涌现出来的无数Lisp方言 . Clojure是为并发而设计的 . 因此,Scheme具有最小和优雅的声誉,具有强大和范式无关的Common Lisp(功能,OO,无论如何),以及支持函数式编程的Clojure .
不要忘记Lisp-1和Lisp-2的区别 .
Scheme和Clojure是Lisp-1:这意味着变量和函数名称都位于同一名称空间中 .
Common Lisp是Lisp-2:函数和变量具有不同的名称空间(事实上,CL有许多名称空间) .
Gimp写在Scheme :)
事实上,有些人认为可能用C编写的软件可能是在Lisp的保护下完成的,很难从中挑选出金苹果 . 事实上,C并不总是很受欢迎,但由于更新的历史,它今天似乎很受欢迎 . 在本世纪的较短一半时间里,C甚至没有使用多线程技术,而今天的Python就是无用的未经测试的错误胶水代码的污水池 . 更快一点,现在我们看到功能编程的增加,更像是适应或死亡 . 我认为就适应部分而言,Java是正确的 .
Scheme旨在简化Lisp语言,这是它唯一的意图,除非它从未真正流行过 . 我认为Clojure做了类似的事情,它的意思是简化JVM的Scheme而已 . 它就像其他JVM语言一样,只是为了扩展用户体验,只是为了简化Java版本中的写入样板 .
4 回答
他们都有很多共同之处:
动态语言
Strongly typed
已编译
Lisp风格的语法,即代码被编写为Lisp数据结构(表单),最常见的模式是函数调用,如:
(function-name arg1 arg2)
功能强大的宏系统,允许您将代码视为数据并在运行时生成任意代码(通常用于使用新语法"extend the language"或创建DSL)
常用于函数式编程风格,虽然有能力容纳其他范例
使用REPL强调交互式开发(即您在代码的运行实例中交互式开发)
Common Lisp的特色:
强大的OOP子系统(Common Lisp Object System)
可能是最好的编译器(根据http://benchmarksgame.alioth.debian.org/u64q/which-programs-are-fastest.html,Common Lisp是最快的Lisp,尽管它没有多少......)
Clojure与众不同的特点:
最大的图书馆生态系统,因为您可以直接使用任何Java库
除了标准列表
()
之外,向量
[]
和 Map{}
用作标准 - 除了向量和 Map 的一般有用性之外,有些人认为这是一种通常更具可读性的创新更加强调不变性和懒惰的函数式编程,有点受Haskell的启发
语言级软件事务内存支持的强并发功能(值得关注:http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey)
方案特色:
可以说是最简单易学的Lisp
卫生宏(参见http://en.wikipedia.org/wiki/Hygienic_macro) - 优雅地避免了宏扩展中意外符号捕获的问题
上面的人错过了一些事情
Common Lisp也有向量和哈希表 . 不同之处在于Common Lisp对向量使用#()而对哈希表没有语法 . 我相信Scheme有矢量
Common Lisp具有读取器宏,允许您使用新的括号(如Racket,Scheme的后代) .
Scheme和Clojure有卫生的宏,而不是Common Lisp的不卫生的宏
所有语言都是现代语言或有大量的翻新项目 . Common Lisp在过去五年中获得了大量的库(主要归功于Quicklisp),Scheme有一些现代实现(Racket,Chicken,Chez Scheme等),而Clojure是最近创建的
Common Lisp有一个内置的OO系统,虽然's quite different from other OO systems you might have used. Notably, it is not enforced--you don' t必须写OO代码 .
语言有一些不同的设计理念 . Scheme被设计为用于理解Actor模型的最小方言;它后来被用于教育学 . Common Lisp旨在统一涌现出来的无数Lisp方言 . Clojure是为并发而设计的 . 因此,Scheme具有最小和优雅的声誉,具有强大和范式无关的Common Lisp(功能,OO,无论如何),以及支持函数式编程的Clojure .
不要忘记Lisp-1和Lisp-2的区别 .
Scheme和Clojure是Lisp-1:
这意味着变量和函数名称都位于同一名称空间中 .
Common Lisp是Lisp-2:
函数和变量具有不同的名称空间(事实上,CL有许多名称空间) .
Gimp写在Scheme :)
事实上,有些人认为可能用C编写的软件可能是在Lisp的保护下完成的,很难从中挑选出金苹果 . 事实上,C并不总是很受欢迎,但由于更新的历史,它今天似乎很受欢迎 . 在本世纪的较短一半时间里,C甚至没有使用多线程技术,而今天的Python就是无用的未经测试的错误胶水代码的污水池 . 更快一点,现在我们看到功能编程的增加,更像是适应或死亡 . 我认为就适应部分而言,Java是正确的 .
Scheme旨在简化Lisp语言,这是它唯一的意图,除非它从未真正流行过 . 我认为Clojure做了类似的事情,它的意思是简化JVM的Scheme而已 . 它就像其他JVM语言一样,只是为了扩展用户体验,只是为了简化Java版本中的写入样板 .