LISP在当今世界仍然有用吗?哪个版本最常用?


117

我尝试每隔一定的时间自学一种新的编程语言。最近,我已经阅读了Lisp及其方言在C / C ++之类的语言中处于完全相反的一端的过程,这使我感到好奇,足以了解更多有关它的信息。但是,我不清楚两件事,我正在寻找有关它们的指导:

  1. LISP是否在当今世界仍在实践/使用,还是像FORTRAN / COBOL这样的传统语言?我的意思是,除了维护现有代码外,它是否还用于新项目?

  2. 什么是最广泛使用的方言?我遇到了Scheme和Common Lisp这两种最流行的方言,并希望您对哪种是最受青睐/最有用的方言发表意见,如果您能为初学者提供任何建议的资源,将不胜感激。

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


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


实用的普通Lisp:gigamonkeys.com/book
Joe Internet,

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

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

Answers:


59

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

对于嵌入式方案,请尝试使用guile:http ://www.gnu.org/s/guile/


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

10
最好的学习计划的书籍是“小计划者”和“ SICP” mitpress.mit.edu/sicp。有很多方案实现可以嵌入到c / c ++中,但是我现在真的不知道哪个方案是好的,因此您可能需要进行一些谷歌搜索。
Zachary K

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

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

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

68

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

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

大多数原始代码编写

  • 可能由于教育应用 而计划(所有方言)
    • 270所学校...让我们猜想50名学生/年,500行代码/学生,运行10年。根据餐巾纸数学计算,超过1,000,000行
    • 球拍本身及其工具中有50万行球拍。
  • 由于AI以及大量开放源代码和生产代码(请参见生产代码),因此可能是Common Lisp 。
  • 可能是Emacs Lisp因为...
    • Emacs本身:超过1,000,000行
    • emacs的量口齿不清书面公开- 237个模块,大约200线/模块的40,000+线只是EmacsWiki,在ELPA可能更
    • 加上以emacs Lisp,.emacs文件等编写的应用程序。
  • Clojure
    • 难以估计。主要是较小的网络通信。可能很多。

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

大多数“生产”代码

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

大多数最终用户

  • 普通口齿不清
    • ITA软件的客户,包括Orbitz,Bing Travel和Kayak.com-可能有数百万。
  • Clojure
    • 花旗银行(无详细信息),Akamai(无详细信息),simple.com,还有许多其他内容。可能数以百万计。
  • 方案
    • CS学生,研究人员和业余爱好者。不到十亿美元。
    • 《神秘海域》系列- 超过500万
  • Emacs Lisp-主要是程序员,主要是在unix平台上。可能是一百万。

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

结论

总之,我发现那个大苹果。


4
不小的橘子?还是紫丁香柠檬?
Vatine 2011年

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

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

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

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

43

LISP是否在当今世界仍在实践/使用,还是传统语言

是的,是的,但是您必须知道在哪里看。使用LISP的人并不太会大声喊着它,但是在过去20年中,有少数几个知名初创公司使用LISP产生巨大影响的例子。它在欧洲的小公司中也很受欢迎。

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

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

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

LISP:直到最近,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相比更类似于R5RS。R7RS标准化过程目前正在进行中,它试图通过在第一个工作组中标准化一种小的基本语言,然后委托第二个工作组来标准化更大的功能,从而既包括R5RS实现者的需求,也包括R6RS民间的需求。这将使该语言在微型嵌入式硬件以及功能更强大的计算机上都具有高效且有用的实现。

现在我将更具体:

PicoLisp是一个非常非常酷的LISP。很小!它是作者自己写的,据我了解,自1980年代以来,他一直以此为生。如果您有机会参加他的演讲,那么您就应该这样做:他非常有趣,并且非常了解他的东西,即使在主流或无聊的场合,您也不会闻到最小的嗅探。

我不熟悉Common Lisp的实现,因此我将不对其进行进一步评论。

Guile是官方的GNU计划。

Racket是一种R6RS方案,但最近它似乎扩大了网络,并正在尝试“充当语言创建,设计和实现的平台”。

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

寻找具有许多模块的实现:这表明它具有广泛的用途,这意味着它可能具有有助于完成当前任务的功能。

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

我会推荐鸡肉,因为那是我用的。我已经在个人项目中使用了它,并且已经(目前正在使用)专业地使用它。

如果某个东西完全过时,我不想投入过多的精力-如果它是专业上的“死者”,我仍然会学习它,而只是从学术角度考虑...

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


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

27

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

我发现在过去的一年中(在Java和C#方面有很多经验之后)以Clojure的形式学习Lisp是非常令人启发的经历。主要原因是:

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

由于以下原因,这似乎也是实际生产中的实际选择:

  • 通过非常容易的Java互操作性在JVM上运行,使您可以访问Java生态系统中的所有库和工具
  • 默认情况下,它是一种动态语言,几乎不需要任何样板就可以非常方便地进行开发和快速原型制作。但是,您可以添加静态类型提示以在需要的地方获得不错的性能。

我个人知道有人在多家投资银行和初创公司中使用Clojure。我也选择Clojure作为我自己的创业公司的主要开发语言,所以我愿意把钱花在:-)


9

我目前也在学习Lisp(我喜欢它)。我使用Common Lisp,但也弄混了SBCLArc(请注意,这是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对于您最终获得的深刻启发经验值得学习;即使您从未真正使用Lisp本身,这种经验也将使您在余下的时间里成为一名更好的程序员。” -埃里克·雷蒙德(Eric Raymond),“如何成为黑客”

[/编辑]


7
FWIW,SBCL是Common Lisp的实现,而Allegro CL也是如此。
Vatine 2011年

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

@Jeff:好吧,它们都向不同的方向扩展了语言,同时保持了“ CL核心”的可互操作性。
瓦汀2011年

@Jetti首先使用的是什么?
马克C

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

8

如果您想今天学习Lisp,我可以看看球拍,它是一种快速的方案实现(嗯,它实际上与方案有些偏离,所以现在是它自己的方言)或clojure,它们可以从它运行在JVM上(因此可以使用成千上万的库,此外,您还可以使其与自己的Java代码进行交互)。

即使您不学习它的实际使用方法,学习它也总是有益的:一旦您将思想围绕Lisp了一段时间,就可以学习思考和处理问题的新方法,甚至使用其他语言。


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

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

7

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

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

AutoCAD以前在其宏系统中使用Lisp方言。我不知道它是否仍然如此。

Scheme是一种简洁的语言,非常优雅。它可能是我最喜欢的编程语言,所以我可能会有所偏见。如果我现在要编写一个主要的应用程序,我可能会用C编写一个框架应用程序,并在Scheme中扩展和定义业务规则。这使我可以使用Scheme并利用C-来提高速度,并提高几乎所有内容的库的可用性。


您会推荐什么作为Scheme的入门书/编译器?我使用Linux,所以,如果有任何对新手特别有用的编辑器(例如Kile用于LaTex),请让我知道...
TCSGrad 2011年

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

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

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

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

4

LISP是否在当今世界仍在实践/使用,还是像FORTRAN / COBOL这样的传统语言?我的意思是,除了维护现有代码外,它是否还用于新项目?

我认识几个在硅谷的初创公司中从事Lisps的人,而且我知道Amazon.com从一开始就一直在使用Lisp(尽管我听说他们出于某种原因将其替换为C ++?)

但是,一个值得关注的公司是顽皮狗。他们所有的游戏都是用Lisp方言编写的。最初,他们自己滚动,但在《神秘海域》系列中使用MZScheme。

什么是最广泛使用的方言?我遇到了Scheme和Common Lisp这两种最流行的方言,并希望您对哪种是最受青睐/最有用的方言发表意见,如果您能为初学者提供任何建议的资源,将不胜感激。

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

我宁愿像其他人所建议的那样喜欢SICP和Little Schemer,但是我也建议使用Lisp Land,这是一本有趣的文章。:)


的确,《 Lisp之地》是一部了不起的书。
Chiron

@ 4bu3li是吗?
Mark C

1
关于Naughty Dog:这不是完全正确的,他们的PS2游戏是用一种类似Lisp的语言GOAL编写的……但是,自从转向PS3之后,他们就改用了C ++。MZScheme主要用作宏预处理器,与C ++一起内联编写,并用于某些资产处理,其某些脚本使用S-exp编写。但是实际上没有MZScheme代码在PS3上运行。
Arelius

2

我认为这部分取决于您要使用它的方式-如果您想进一步了解各种编程概念,并使自己成为一个更好的程序员,那么我想值得至少学习一点Lisp。如果您正在寻找另一种要添加到简历中的语言,以期寻求使用该语言的工作,那么您可能想在其他地方查找。没有那么多Lisp工作。

我个人尝试使用SBCL或最近使用的Clojure(以及一些Emacs Lisp,但是使用htat是因为我是Emacs的长期用户-当我尝试学习Lisp时,我将尝试学习Emacs Lisp)。现在我需要做的就是找到时间真正使用这些语言。


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

2

我不知道LISP中有很多工作,我当然看不到。但是我确实记得很长一段时间读过一些有关NASA探测器的信息,这些探测器在其中运行LISP并能够从地球插入新代码。

同样在纽约,clojure聚会组织也很庞大。我猜想,如果您有兴趣并去参加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表达式多次,您可能无法获得预期的结果,因为表达式可能会被多次评估,因此请注意副作用...


3
您实际上可以通过MAX(MAX(a b) c)
Andrea

您说得对,这就是我醒来后不久就会得到的答案。我调整了答案。
Cervo'3

2

2

另外两点:

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

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


1

现在,我给人的印象是Lisp主要用于咨询店(而不是咨询店主要使用它)。

实用软件被认为有点荒唐。我相信,主要是因为人们不习惯。

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

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

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


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


1

我想添加一些有关Common Lisp和Scheme的观点。由于JVM,我避免了Clojure,所以对此我没有太多的看法。

Scheme是一种简洁明了,定义明确的语言。由于遗留问题,CL不得不做出很多决定,并且采取了更为纯粹的方法。例如,变量和函数在同一名称空间中。默认语言更小,更简洁,非常适合教给lisp擅长的各种事情,例如,它默认使用递归而不是迭代,因为它默认没有迭代循环,并且需要进行尾部调用优化。Scheme有一个非常有趣的卫生宏系统,对学习有很大的价值。但是IMO,我建议您首先学习CL风格的Unhygienic宏,即使不是规范的一部分,大多数(?)方案方言也可以提供其中至少一种实现。由于您似乎很想学习一种语言,因此我

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

另一方面,Common Lisp似乎是一种更实用的语言开发方法。该标准使得许多Lisp代码可在实现之间移植,许多编译器都经过快速优化。有很多软件包,其中许多在实现之间可移植。似乎(相对)大量的实际产品正在用该语言创建。有了quicklisp,它的包管理就可以与您在诸如Ruby或Node这样的现代社区中所获得的东西相当接近。但是,CL并非没有缺陷,与方案相比,它在这一点上具有很大的规格,甚至它的对象系统CLOS(传统上用Lisps编写为库)也是IIRC规格的一部分。您会感觉到遗产在整个系统中根深蒂固。

否则,我说我不会讲Clojure,如果您的目标是编写Emacs扩展,那么Emacs Lisp显然是适当的选择,而显然不是其他软件的适当选择。

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


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

0

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

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

单个可执行文件体积小,速度快,并且包含很多电池。


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

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

0

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


根据基准测试,与SBCL相比,Clojure的表现还不错:基准测试
游戏.alioth.debian.org / u32 /…

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

我想如果您想在JVM上使用Lisp,请选择Clojure。它不是完美的,但却是一种真正的乐趣(恕我直言)
AndreasScheinert 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.