我会定期地自学一种新的编程语言。最近,我已经阅读了Lisp及其方言与C / C ++之类的语言完全相反的一面,这使我感到好奇,足以了解更多有关它的信息。但是,我不清楚两件事,我正在寻找有关它们的指南:


LISP在当今世界仍在实践/使用吗,还是像FORTRAN / COBOL?我的意思是,除了维护现有代码外,它是否还用于新项目?
最广泛使用的方言是什么?我遇到了Scheme和Common Lisp这两种最普遍的方言,并希望您对哪种是最受青睐/最有用的方言发表看法,如果您能为初学者提供任何建议,将非常感激。

虽然渴望学习一种与我习惯上的程序语言根本不同的语言,但我不想为某种完全过时的东西投入过多的精力-我仍然会学习如果它是专业上的“死亡”,但仅具有学术角度...

评论

我对这个问题很感兴趣。每当我有时间的时候,我决定尝试学习Lisp。每当我被您在这里问到的同样的问题和不确定性所挫败时。我应该学习哪个版本的Lisp?除了Paul Graham之外,还有人真的使用Lisp吗?我应该学习Lisp,还是像Haskell这样的较新的功能编程语言之一? Lisp与Scheme等相比有什么好处。

麻省理工学院的计划/ Lisp课程:ocw.mit.edu/courses/electricalengineeringand-computer-science / ...

实用的常见Lisp:gigamonkeys.com/book

“仍然”? (我开玩笑!)

我刚刚在SO:stackoverflow.com/q/1614724/212942
上找到了另一个相关线程

#1 楼

我更喜欢Scheme,如果要使用JVM,则应签出Clojure,这是一个旨在在JVM中工作的Lisp。是的,Lisp仍然值得学习,以了解这种最小的设计有多么强大!创造口齿不清的人确实有些正确。令人惊奇的是Lisp在1960年代拥有许多现代语言的酷炫新功能! >

评论


我主要是C ++的人,有没有一种适用于C / C ++的方言?您还能为初学者学习一些语言,以便他们开始学习该方言吗?

–TCSGrad
2011年3月6日14:23在

最好的学习计划的书是《小计划者》和《 SICP》。有很多方案实现可以嵌入到c / c ++中,但是我现在真的不知道哪种方案是好的,因此您可能需要进行一些谷歌搜索。

– Zachary K
11 Mar 6 '11 at 14:27

我应该指出,该方案非常简单!您将在2个小时内学到90%的语言。当然,这并不意味着您将掌握它,只是您将知道语法的工作原理。

– Zachary K
11 Mar 6 '11 at 14:27

@ shan23计划是为教学而设计的。毫无疑问,它可以用来教大一学生如何编程,所以我毫无疑问您将不会有任何学习困难。如果要进行C或C ++集成,请查看Guile(en.wikipedia.org/wiki/GNU_Guile)。

–Vitor Py
2011年3月6日14:28

肯特·戴维格(Kent Dybvig)的Scheme编程语言书也许并不那么出名,但是却是一本非常不错的书。 scheme.com/tspl4如果您使用Emacs,则学习一些Lisp非常方便。

– blispr
13年2月21日在17:14



#2 楼

在回答问题2“最广泛使用的方言”时:

取决于您如何解释“最广泛使用的方言”。以下是一些餐巾纸数学,用于确定几种选择的方言中的每一种得到多少使用的下限。

编写的大多数原始代码


由于教育的应用,可能有计划(所有方言)

270所学校...让我们猜50学生/年,500行代码/学生,运行10年。 1,000,000+行基于餐巾纸数学。
Racket本身及其工具中有500,000行Racket。


由于AI和大量开放源代码以及生产代码(请参阅生产代码)。

共同创建建模(现在来自PTC):仅Orbitz就有几百万行Common Lisp
200,000多行。


也许不是这样。


Emacs Lisp可能是由于...

Emacs本身:超过1,000,000行>公开编写的emacs lisp数量-仅在EmacsWiki上的237个模块,约200行/模块就是40,000+行,在ELPA中可能更多,
以emacs Lisp,.emacs文件等形式编写的应用程序


Clojure

很难估计。主要是较小的网络公司。可能很多。



获胜者:Scheme或Common Lisp。未知数太多。

大多数“生产”代码


方案-一些开源软件。

Racket本身及其工具中有500,000行Racket。
游戏脚本,例如顽皮狗游戏开发中的经验



常见的Lisp-很难说。可能在内部使用了很多。 commercial
,也许还有一些开源。
当然还有实现本身的Common Lisp。


Emacs Lisp-至少有1,000,000行计算Emacs本身。除此之外,不是很多(显然是一些)。
Clojure-很难说,肯定有一些用途,例如没事书架上出现的书开始暗示了这一点。

获奖者:我猜是Common Lisp。我认为我们可以基于Common Lisp和Clojure的使用对问题1回答“是”。

大多数最终用户


Common Lisp

ITA Software的客户包括Orbitz,Bing Travel和Kayak.com-可能有数百万。


Clojure

花旗集团(无详细信息),Akamai(没有详细信息),simple.com和许多其他内容。大概是数百万。不到一百亿美元。
《神秘海域》系列-超过500万个




Emacs Lisp-主要是程序员,主要是在unix平台上。可能是一百万。

优胜者:Scheme的下限是最好的,因为在Uncharted上有销售数字,但这值得商de。

结论

总而言之,我找到了大苹果。

评论


不小的橘子?还是紫丁香柠檬?

–疫苗
2011-3-8 15:49

实际上,方案-特别是球拍方案-似乎是最新的Lisp方言。有专业级的工具和库。

– Biikal Lem
2012年4月21日21:44

@Bikal我希望对OpenGL的支持不是那么过时,但是直接模式不是我的Racket代码的最大缺点...

–杰西·米利坎(Jesse Millikan)
2012年4月22日下午5:46

不知道Orbitz使用CL ...我知道在哪里寻找我的下一份工作:D

–钻机
13年2月21日在23:32

在Racket中编写的LOC超过10万。 Racket标准库/ IDE /工具超过500k,并且在SET,波音和Naughty Dog等公司中使用。

– Sam Tobin-Hochstadt
13年2月22日在17:51

#3 楼


LISP是否在当今世界仍在实践/使用,还是传统语言?是的,但是您必须知道在哪里看。使用LISP的人并不太会大声喊着它,但是在过去的20年中,有一些举世瞩目的初创公司使用LISP产生巨大影响的例子。欧洲的公司。


什么是最广泛使用的方言?


这是一个有效的问题,但回答起来并不容易。它可能也不是一个特别有用的答案:许多实现都有特定的重点,因此,如果它们适合您的特定问题,则最好选择它们,而不是根据其使用的广泛程度进行选择。相反,我会告诉您一些选择,您可以自己决定。

LISP是一类语言,每种语言都有一类方言和实现。方言大致分为“ LISPs”和“ Schemes”两个阵营。

LISPs:
直到最近,Common LISP还是国王。这是试图统一所有不同的LISP,而又毫不客气地是LISP的“ C ++”。也就是说,这是一种巨大的语言。它拥有一切。在过去的几年中,Clojure出现了。 Clojure是一种LISP,可在Java虚拟机上运行,​​并尝试将其自身植根于功能性编程原理中。传统上,其他LISP严格是多范式。 Clojure很有趣,因为它在LISP和JVM中都得到了最好的和最坏的。基于Java的语言仍然有很多冗长的细节,它们在语法上相当自由和容易,因此有很多用于处理不同事情的旋钮和按钮,但是它们在数据类型方面有一些非常有趣的想法,尤其是一些他们想出的实用方法来应用函数式编程的思想。

方案:
方案是LISP的严格子集。 Scheme由Steele和Sussman发明,在早期就因在MIT Computing 101讲座课程中使用而著名。方案在“关于算法语言方案(RnRS)的修订报告”中定义。是的:他们那里有个数学笑话。 Scheme是其他LISP所没有的一种标准化语言。这极大地有助于实现之间的可移植性,但这不是灵丹妙药。标准化工作趋于保守,实现方面的创新(尤其是围绕模块之类的创新)趋于完全不同。还有一系列SRFI(实施方案请求),类似于IETF的RFC流程。人们使用它根据需要对小事物进行标准化。

方案不同于LISP,它们具有一系列必须满足的硬性要求,其中之一是“尾部调用优化”,这有助于提高递归效率。因此,Scheme中的递归编程风格比LISP中的流行得多。同样,方案也很像LISP的“ C”。也就是说,这是一种小语言,您应该能够一次将所有这些都保存在脑海中。

当前有两个Scheme系列:基于第5版(R5RS)的和基于6版(R6RS)的。 R6RS的复杂性远高于其任何前任产品,因此许多R5RS实现选择跳过它,希望R7RS与R5RS更加相似。 R7RS标准化过程目前正在进行中,它试图通过在第一个工作组中标准化一种小的基本语言,然后委托第二个工作组来标准化更大的功能,从而既包括R5RS实现者的需求,也包括R6RS民间的需求。这将使该语言能够在微型嵌入式硬件以及功能更强大的计算机上实现高效且有用的实现。非常非常酷的LISP。很小!它是作者自己写的,据我了解,自1980年代以来,他一直以此为生。如果您有机会参加他的演讲,那您就应该这样做:他非常有趣,并且非常了解他的东西,即使是主流或无聊的事情,您也不会闻到。我不熟悉Common Lisp实现,因此我将不对其作进一步评论。

Guile是官方的GNU Scheme。似乎拓宽了网络,并正在尝试“充当语言创建,设计和实现的平台。”。

鸡肉的目标是成为一个实用的计划。它基于R5RS并编译为C。事实证明这是一个非常重要的优势,因为它使使用现有C库绝对不容易。因此,Chicken可能是替代Perl,Python,Ruby等作为您日常脚本语言的最有用的方案。几年来,有一些人专门将其用于所有需求。它具有交互式REPL和编译器。该社区(在邮件列表和IRC上)都是知识渊博,友好且乐于助人的人。帮助完成手头的任务。

寻找使用编译器或至少不是严格基于IDE或REPL的实现。许多为教学而设计的实现都很难用于通用脚本。

我建议使用Chicken,因为这就是我使用的。我已经在个人项目中使用了它,并且已经专业地使用了它(并且目前正在使用它)。已过时-
如果它是专业上的“死神”,我仍然会学,但只有从学术角度来看...


方案不是专业上的死了,但您可能需要花点时间才能在那种情况下使用它。像Chicken这样的东西远不止是学术上的追求,它可以轻松涵盖您当前使用的任何高级语言的几乎所有基础。

评论


球拍不是R6RS计划; Racket发行版提供了一种语言。实际的球拍语言是一种在许多重要方面都与RnRS背离的方案(对此我有多种感觉)。

–JasonFruit
13年2月22日在22:39

#4 楼

不能真正代表所有Lisps说话,但Clojure绝对是目前热门且相关的语言。我本周早些时候去的伦敦Clojure用户组有100多名与会者....

在过去的一年中,我发现以Clojure的形式学习Lisp是非常令人启发的体验(经过Java和C#的大量经验之后)。主要原因如下:


它非常强调函数式编程(比其他大多数Lisps编程语言更重要)。作者和BDFL Rich Hickey经常引用Haskell作为他进行语言设计的灵感之一,这意味着您可以获得诸如完全不变的数据结构和惰性无限序列等之类的东西。是数据”的哲学很难理解,除非您实际经历过,但这是Lisps如此富有表现力和生产力的原因之一
对多核并发的出色支持-我实际上认为Clojure是并发的最佳语言现在进行编程。有关此内容的启发性说明,请参见http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey。原因如下:


通过非常容易的Java互操作性在JVM上运行,使您可以访问Java生态系统中的所有库和工具。默认情况下,这使得开发和使用几乎没有样板的快速原型变得非常方便。但是,您可以添加静态类型提示以在需要的地方获得不错的性能。我也选择Clojure作为我自己的创业公司的主要开发语言,所以我愿意把钱花在:-)

#5 楼

我目前也在学习Lisp(并且我喜欢它)。我使用Common Lisp,但是我也弄混了SBCL,Arc(请注意,这是Paul Graham的Lisp版本,正如Vitor Braga创建Yahoo store / Viaweb所提到的)和Allegro CL,类似于Visual Studio for Lisp(创建GUI,但是,我从未使用过它)。

就用途而言,Lisp在人工智能中已被大量使用,但老实说,我不确定Lisp还有多少其他“通用”用途。许多用Lisp构建的网站最初都是用其他语言重写的,因此很难说它已用于Web开发中(不是说它不是,但是使用它的较大型站点不再这样做了) )。经过快速搜索(非常快速)之后,这里是来自Wikipedia的Common Lisp编写的软件的列表。

[EDIT]对于Lisp的专业使用,有一些工作可以帮助您使用Lisp。 。它们不像Java或C#那样多,但是它们存在。我认为Lisp是用于内部应用程序的语言之一,可能会提供竞争优势,而公司则不想通过广告宣传使用Lisp的方式而放弃竞争优势。我记得在P.SE上看到过一篇帖子,指出Smalltalk在金融领域也很相似。不能在工作中使用Lisp。您的日子,即使您从未真正使用过Lisp本身。”
-Eric Raymond,“如何成为黑客”


[/ EDIT]

评论


FWIW,SBCL是Common Lisp的实现,而Allegro CL也是这样。

–疫苗
2011-3-8 15:47



@Vatine-您是正确的。如果有一张脸红的脸,我现在就做。我不知道为什么我认为他们不同。愚蠢的我不同的编译器!=不同的方言:)谢谢!

–杰蒂
11年8月8日在16:12

@Jeff:嗯,它们都向不同的方向扩展了语言,同时保持了“ CL核心”的互操作性。

–疫苗
2011-3-9在12:42

@Jetti首先使用的是什么?

– Mark C
2011年8月31日18:50

我相信我正在使用CLISP,它位于我不再拥有的VM映像上。我认为我的无知使我相信这是常见的轻视。至少现在我知道了。

–杰蒂
11年8月31日在18:53

#6 楼

如果您想今天学习Lisp,我可以看看球拍,它是一种快速的方案实现(嗯,它实际上与方案有些偏离,所以现在是它自己的方言)或clojure,它们可以从它可以在JVM上运行(因此有成千上万的库可供使用,而且您可以使其与自己的Java代码进行交互)。有益的:一旦您将思想围绕Lisp了一段时间,就可以学习思考和处理问题的新方法,甚至使用其他语言。

评论


Scheme的问题在于,当您开始进行一些练习时,您不想回到其他语言。我刚刚开始在C ++中实现流(可能是无限的,延迟评估的,不可变的序列),并且比Scheme中的代码更多! Scheme的简单性和强大功能使我感到非常惊讶。

–乔治
13年2月21日在11:17



++用于球拍。它确实非常完整,这是对其他方案的批评之一。它超越了方案在创建自己的语言方面可以做的事情。

–斯科特·克拉伦巴赫(Scott Klarenbach)
13年2月22日在20:58

#7 楼

Amazon后端的很大一部分曾经使用Lisp,但现在已用C ++重写,所以我听说(我必须承认我对此没有可靠的来源)。

Yahoo!商店是Lisp Web应用程序的经典示例之一。来自Yahoo!商店,您可能听说过保罗·格雷厄姆(Paul Graham)。格雷厄姆(Graham)是最著名的Lisp倡导者之一,并撰写了大量有关该主题的文章。您可能想阅读他的站点,以了解他的观点。

AutoCAD过去在其宏系统中使用Lisp方言。我不知道它是否仍然可以使用。它可能是我最喜欢的编程语言,所以我可能会有所偏见。如果我现在要编写一个主要的应用程序,我可能会用C编写一个框架应用程序,并在Scheme中扩展和定义业务规则。这使我可以使用Scheme并利用C-来提高速度以及几乎所有内容的库的绝对可用性。

评论


您会推荐什么作为Scheme的入门书籍/编译器?我使用Linux,因此,如果有任何对新手特别有用的编辑器(例如Kile用于LaTex),请告诉我...

–TCSGrad
11 Mar 6 '11 at 14:21

@ shan23小计划者(ccs.neu.edu/home/matthias/BTLS)是您最好的选择。我相信emacs是Scheme的最常用编辑器,但是要花一些时间才能习惯它。

–Vitor Py
2011年3月6日14:26

Lisp的编辑器,很简单,请使用emacs。它是由Lisp的人编写的,并且使用Lisp。

– Zachary K
2011年3月6日14:28

您也可以使用Racket IDE(racket-lang.org);它类似于Emacs,但是具有自动格式设置和与Scheme解释器的交互。

–耶利米·威尔考克(Jeremiah Willcock)
2011-3-6 22:46

Lispbox(common-lisp.net/project/lispbox)开箱即用(一些emacs经验很有用)。它基于ccl(ccl.clozure.com),另请参见gigamonkeys.com/book/…

–乔治
13年4月13日在15:21

#8 楼


LISP是否在当今世界仍在实践/使用,还是像FORTRAN / COBOL这样的传统语言?我的意思是,除了维护现有代码外,它是否还用于所有新项目中? com从一开始就一直使用Lisp(尽管我听说他们出于某种原因将其替换为C ++?)

但是顽皮的狗是一家值得关注的公司。他们所有的游戏都是用Lisp方言编写的。最初,他们自己滚动,但在“神秘海域”系列中使用MZScheme。我遇到了Scheme和Common Lisp这两种最普遍的方言,并希望您对哪种是最受青睐/最有用的方言发表看法,如果您能为初学者提供任何建议,将非常感激。


我敢说Common Lisp,Clojure,Scheme和Emacs Lisp是使用最广泛的四种方言,其中我怀疑Scheme是最常用的方言,部署。当然,我没有任何支持。 :)

我喜欢其他人建议的SICP和Little Schemer,但我也建议使用Lisp之地,这很有趣。 :)

评论


的确,《 Lisp之地》是一部很棒的读物。

–凯龙
2011年6月14日19:55

@ 4bu3li是吗?

– Mark C
11年7月29日在17:40

关于Naughty Dog:这不是完全正确的,他们的PS2游戏是用GOAL(一种口齿不清的语言)编写的……但是,自从转到PS3以来,他们已经改用C ++。 MZScheme主要用作宏预处理器,与C ++一起在线编写,并用于某些资产处理,并且其某些脚本使用S-exp编写。但是实际上没有MZScheme代码在PS3上运行。

–阿雷留斯
13年2月21日在18:04



#9 楼

我认为这部分取决于您要使用它的方式-如果您想进一步了解各种编程概念,并使自己成为一个更好的程序员,那么我想值得学习一下Lisp。如果您正在寻找另一种要添加到简历中的语言,以期寻求使用该语言的工作,那么您可能想在其他地方查找。 Lisp的工作很少。当我尝试学习Lisp时,尝试学习Emacs Lisp)。现在我需要做的就是找到时间来真正使用这些语言...

评论


它主要是第一个……很明显,如果我做到了这一点,那肯定不会损害我的履历:)。但认真的说,我确实希望对不同的编程“样式”有一个了解,以便使我对在不同情况下使用哪种样式有个好主意(不想陷入只装备锤子的情况,我必须把所有问题都当成钉子!!)

–TCSGrad
2011年3月6日17:38

#10 楼

我不知道LISP中有很多工作,我当然看不到。但是我确实记得很长时间以前读过一些有关NASA探测器的信息,这些探测器运行LISP并能够从地球插入新代码。我猜想,如果您有兴趣并去参加Clojure聚会小组,您可能会找到交流机会并找到工作(不是Clojure工作,而是Java / C ++ /等工作)。在纽约地区似乎绝对是巨大的,其他地区可能有所不同。

LISP也是一种不同的思维方式。另外,LISP和SQL都导致使用大量嵌套表达式。我大量使用SQL,然后注意到LISP更有意义。但是,如果您在使用LISP时遇到SQL习惯于使用超级嵌套括号和表达式的麻烦,则可能会使SQL表达式更容易理解。

一个经典示例是如何实现MAX(a,b, C)。您可以使用一堆if语句制作一个复杂的函数。或者您可以只说

MAX(MAX(a,
b),
c)

并使用两个简单的嵌套调用MAX,对我来说更容易阅读。尽管如果性能是一个问题,您可能也想换一种方式,但是在使用每种方法时,我都不必费心计算比较次数...同样,如果您是通过C宏或其他评估结果的方法实现MAX表达式多次,您可能无法获得预期的结果,因为表达式可能会被多次求值,因此请注意副作用...

评论


您实际上可以将MAX简化为MAX(MAX(a b)c)

– Andrea
2011-3-6在17:55

您说的没错,这就是我醒来后不久就回答的内容。我调整了答案。

–切尔沃
2011-3-6在18:11

NASA项目是“深空1:flownet.com/gat/jpl-lisp.html”

–坦率的剪毛
2011年6月14日19:46

#11 楼

还有两个要点:首先,Lisp是一种很棒的语言,用于编写代码,其中函数或数据之间的交互通常很复杂。在许多流行的语言中,如果您对程序为什么要执行的操作感到困惑,则必须编写特殊的函数来检查程序的内部状态。在某些语言中,则必须等待代码重新编译。当然,可能会有诸如调试器之类的工具对此提供帮助。但是,在Lisp中,您所需要的只是一种停止程序的方法,然后,通常,您可以访问Lisp中的所有内容。在Common Lisp中,有时我只是键入^ C,或将对error的调用引发到单个函数中(这是唯一必须重新编译的东西,您无需执行任何操作即可重新编译它)。停止程序后,我立即被投入调试器中,但是该调试器为我提供了Lisp的全部功能,并且可以退出调试器,调用特定的函数等。我可以轻松地检查任何数据结构在我的程序中。大多数计划应允许类似的做法。 Lisp在这方面不是唯一的,但是它提供的功能超出了许多流行语言所提供的功能。

第二:如果您要尝试使用Lisp的任何方言,我都不会( a)使用与括号匹配的编辑器,以及(b)学习正确的Lisp缩进。使用一个也可以为您近似缩进的编辑器是一个好主意。 C / C ++ / Java风格的代码格式设计用于括号/花括号/括号比Lisp少的语言。熟悉Lisp的漂亮打印样式效果很好,而且不会因括号引起的混乱或浪费您一半的空间,而每行只用一个右括号。

#12 楼

现在,我给人的印象是Lisp通常用于咨询店(不是咨询店主要使用它)。我相信,主要是因为人们不习惯。

传统上,Scheme是Lisp的一种相当学术的方言,而Common Lisp是行业的方言。

Lisp对于符号操作和类似反射的功能特别有用。

例如,我编写的学习Lisp的代码是一个程序,该程序构造随机lambda函数,对其进行评估,然后对其进行操作,以尽量减小该函数与目标函数的差异。所有这些都是直接操纵。用C ++或Java这样的语言,我将不得不为计算机可以操纵的功能发明一种表示形式。

评论


您对Scheme / Common Lisp之间的区别提出了有趣的观点-您能否详细说明原因/方式?

–TCSGrad
2011年3月6日17:34

stackoverflow.com/questions/108201/common-lisp-or-scheme :-) community.schemewiki.org/?scheme-vs-common-lisp

– Paul Nathan
2011年3月6日17:52

#13 楼

我想添加一些有关Common Lisp和Scheme的观点。我避免了由于JVM造成的Clojure,所以我对此没有太多的看法。由于遗留问题,CL不得不做出很多决定,并且采取了更为纯粹的方法。例如,变量和函数在同一名称空间中。默认语言更小,更简洁,非常适合教给您lisp擅长的各种事情,例如,它默认使用递归而不是迭代,因为它默认没有迭代循环,并且需要进行尾部调用优化。 Scheme有一个非常有趣的卫生宏系统,对学习有很大的价值。但是IMO,我建议您首先学习CL样式的不卫生宏,即使不是规范的一部分,大多数(?)方案方言也可以提供其中至少一种实现。由于似乎很想学习一种语言来学习,所以我建议使用Scheme,因为除此之外,它的许多概念很容易转换为其他形式和动态语言。

具有说,Scheme的社区是零散的,除了几个小口袋以外,似乎主要致力于完成实际工作的研究...例如,每个方言都有自己的软件包管理器,并且软件包通常无法跨方言,这在计划社区中是一个巨大的问题。

另一方面,Common Lisp似乎是一种更加实用的语言开发方法。该标准使得许多Lisp代码可在实现之间移植,许多编译器都经过快速优化。有很多软件包,其中许多在实现之间可移植。似乎(相对)大量的真实产品正在用该语言创建。借助quicklisp,它的包管理感觉与您在Ruby或Node这样的现代社区中所获得的东西相当接近。但是,CL并非没有缺陷,与方案相比,它在这一点上具有很大的规格,甚至它的对象系统CLOS(传统上用Lisps编写为库)也属于IIRC规格。您会感觉到遗留在大量系统中的根深蒂固。例如,提取映像进行编译的标准构建系统方法感觉特别奇怪。写Emacs的扩展,以及漂亮显然不是合适的选择其他软件

TLDR。如果您的目标是学习,我建议您使用Scheme。但是,如果要创建软件,我建议使用两种主要Lisp变体中的Common Lisp。

评论


顺便说一句,PLT Racket是一种更类似于方案的语言,最初来自于方案社区,该方案似乎试图对实际工作有用。如果这些天我打算用一种方案编写代码,则可能是PLT或Chicken Scheme,但是后者可能是由于我内心的软弱所致。

–阿雷留斯
13年2月21日在18:31

#14 楼

我从答案中学到了很多。感谢所有为这次启发性对话做出贡献的人。

我应该提到newLISP。尽管它与CL和Scheme有所不同,但它实现了许多非常有用的功能。我发现http服务器,多处理功能(Cilk)和远程评估功能非常干净并且易于使用。 >

评论


提到它可能很公平,但我不会完全推荐它。。。没有词法作用域,也没有模块,例如-认真吗?我真的不了解newLISP想要完成的工作。

–cji
13年2月23日在1:53

您是对的-情况有所不同。它使用上下文和动态范围,并且根据我的经验模块和上下文是相互关联的。它不会尝试成为另一个CL或Scheme。阅读有关其差异的页面(newlisp.org/index.cgi?page=Differences_to_Other_LISPs)可以阐明设计问题。同样,我不会推荐任何想要获得CL或Scheme经验的人。但是对于某些用例,这可能是一个可行的选择。那就是开源生态系统的美丽-许多选择!

–Cyber​​Fonic
13年2月28日在4:35



#15 楼

选择学习哪种Lisp方言时要考虑的另一个因素可能是实现的数量和质量。如果一种方言只有一个或两个实现,那么您将被困在它们的缺陷中,直到这些缺陷被修复为止,而且人们总是有机会停止完善实现。就其本身而言,这不是不使用Lisp的单一实现方言的理由,但这是需要考虑的事项。 Scheme和Common Lisp的优点是这些方言有许多实现。两种语言都已经发布了标准,因此相对较新的实现大多数都可能运行相同的代码。其中一些实现已经存在很长时间了,但仍处于积极开发中:它们现在是高质量的实现,并且仍在完善中。 (例如,上面提到的Steel Bank Common Lisp(SBCL)非常快。我想使基于JVM的Lisp变得如此快会多么容易。)

评论


根据基准测试,Clojure与SBCL相比还算不错:

– AndreasScheinert
13年3月22日在9:16



谢谢安德烈亚斯。你是对的。显示我对JVM的了解程度不多。在某种程度上,我被ABCL误导了,ABCL是一个相对较慢但基于JVM的不错的CL。

–火星
13 Mar 23 '13 at 4:53

我想如果您想在JVM上使用Lisp,请选择Clojure。这不是完美的,但却是真正的乐趣(恕我直言)

– AndreasScheinert
13年4月3日在8:49