11 lisp scheme clojure common-lisp
现在我一般都在Java/C#中(爱他们两个,真的不能说我专注于一个).
我最近和朋友一起讨论了F#和C#之间的区别,当他惊讶地说:"那么...... F#听起来很像lisp,但是对瑞士军刀的感觉却少了."
现在,我有点惭愧地说这个,但我不知道什么是口齿不清.
经过一番搜索,我看到lisp非常有趣,但被多种方言和运行环境所困扰.
这就是我所知道的:我知道3种方言:
lisp的基本思想似乎是将代码用作数据.
我想知道的:
我也很高兴你们可以给我任何额外的细节!(链接也很受欢迎!电子书和诸如此类的东西.)
编辑:这里的所有答案都非常有用.因此,我给了他们所有+1代表,但最好选择更具体的.谢谢你们.
mik*_*era 14
在来到Lisp之前,我还深入学习了Java和C#,所以希望能够分享一些有用的观点.
首先,所有Lisps都很棒,你应该考虑学习一个.Eric Raymond有一句名言:
"Lisp值得学习,当你最终得到它时,你将获得深刻的启蒙经验;即使你从未真正使用Lisp本身,这种经验会让你成为更好的程序员."
Lisps特别有趣和强大的原因是:
我个人建议Lisp现在学习的是Clojure.Clojure有一些明显的优势,使其脱颖而出:
[]和哈希映射添加了一些新语法.纯粹主义者可能不赞成,但我个人认为这些创新的发现使语言的使用和阅读更加美好.{}()(.methodName someObject arg1 arg2).随着巨大的Java库生态系统(主要是开源)的可用性,Clojure在实用性方面基本上超越了所有"利基"语言在应用方面,Clojure旨在成为一个完全通用的语言,因此可以在任何领域使用 - 当然不限于AI.我知道人们在创业公司中使用它,将其用于大数据处理,甚至编写游戏.
最后关于性能点:对于使用更高级别的语言结构,你基本上总是要付出轻微的性能损失.然而,根据我的经验,Clojure与Java或C#"足够接近",你不会注意到通用开发的差异.它有助于Clojure 始终编译,并且您可以使用可选类型提示来获得静态类型的性能优势.
在有缺陷的基准(如2012年初的)放的Clojure的像Java,Scala和C#,后面Common Lisp的一点点,未来计划(球拍)的一点点静态类型语言的速度的2-3倍之内.
Tay*_*mon 11
正如你所发现的那样,Lisp不是一种语言; 它是一系列具有某些共同特征的语言.
Lisp有两种主要方言:Common Lisp和Scheme.这两种方言中的每一种都有许多实现,每种都有自己的特性.但是,Common Lisp和Scheme都是标准化的,并且标准定义了一些特定的功能基线,您可以期望任何实现都具有这些功能.
Scheme是一种简约语言,具有非常小的标准库.它主要由学生和理论家使用.Common Lisp具有更多语言功能和更大的标准库,包括强大的对象系统,并已用于大型生产系统.
Clojure是另一种次要的,更近期的方言.如果你想了解Lisp,你最好先学习Common Lisp或Scheme.
我的建议是先学习Scheme; 它是Lisp所构成的思想的更纯粹的表达,并将帮助您理解语言的本质.在许多方面,Lisp与Java和其他命令式语言完全不同; 但是,从中学到的东西将使你成为这些语言中更好的程序员.在了解Scheme之后,您可以轻松学习Common Lisp.
简而言之,Lisp的优势在于它比其他语言更强大.所有Lisp代码都是Lisp数据,可以这样操作; 这使得您可以使用元编程来做很酷的事情,这些事情根本无法在其他语言中完成,因为它们不能让您直接访问构成代码的数据结构.(Lisp可以做到这一点而且它们不能与其奇怪的语法密切相关.每个编译器或解释器在阅读源代码后,必须将其转换为抽象语法树.与其他语言不同,Lisp的语法是直接的Lisp代码被转换成AST的表示,因此您可以知道这些树的外观并且可以直接操作它们.)最常用的元编程功能是宏; Lisp宏可以直接将一些源代码翻译成你可以编程的任何东西.你不能用C宏来做到这一点.
"开发和执行速度更快"的事情可能是对大多数Lisp实现提供的一个特定功能的引用:read-eval-print循环.您可以在提示中键入表达式,解释器将对其进行评估并打印结果.这对于学习语言以及调试或调查代码都很有用.
Lisp是动态类型的(尽管存在静态类型的风格).大多数Lisp实现都在自己的虚拟机上运行; 但是,许多也可以编译为机器代码.Clojure专门针对JVM编写; 它还可以针对.NET和JavaScript.
虽然Lisp最初是为人工智能研究而创建的,但它并不仅限于人工智能.它在主流生产环境中不受欢迎的主要原因(除了Java和C#的自我延续优势)是图书馆支持.Common Lisp有很多好的库(Scheme不那么好),但与Java或Python提供的大量库支持相比,它显得相形见绌.
如果你想开始,我建议下载Racket,一个非常受欢迎的Scheme实现.它拥有您需要的一切,包括一个简单但非常强大的IDE,带有一个开放式读取评估打印循环.尽管最初是作为一种教学语言开发的,但它带有一个非常大的标准库,它比Common Lis更具有Common Lisp的特性.因此,它在真实的生产环境中得到了应用.