Lisp有什么优点?[关闭]


103

我对Lisp的了解不够多,无法说出它的好坏。似乎每个使用Lisp的人都喜欢它,但是,当今最流行的语言是C派生的。

那么Lisp到底有什么好用的,为什么不使用更多呢?Lisp到底有什么不好的地方(除了不断增加的括号)?


5
“如今,大多数流行语言都是C语言的衍生”,只是表面上的。如果您仅查看功能而不只是使用花括号,您会发现现代语言离Lisp并没有那么远,而且一直在不断接近。例如,使用C#或Python或Ruby编写的程序看起来更像Lisp,而不是

11
JavaScript是一个看起来像C但更像Lisp的语言的好例子。它的很多设计都类似于Scheme。
日,日本

肯,这是个好主意:过去,Lisp所独有的功能(一流的功能,作为数据的功能,甚至是宏)正以其他语言提供。而且反馈不是单向的:Lisp正在发展新技术和习语以识别其他语言(例如,CLOS是对面向对象范例成功的回应)。
itowlson 2010年

6
Lisp采纳了所有想法,但是CLOS对此有何回应?CLOS(1986-1987)在很大程度上是Lisp早期对象系统的标准化,例如,Lisp Machine Lisp(1980)包括Flavors。我认为“ OO范式的成功”在1980年还没有显现出来:“带有类的C”仅成立了一年(距离重命名“ C ++”还有3年的时间),我不知道Simula-67曾经非常受欢迎。Lisp还具有当今流行语言所没有的许多其他高级功能。OO碰巧已经成功了,但是Lisp却没有成功,因为(或何时)它很流行。

我认为使用Lisp的每个人都不喜欢它。我的经历是不同的。尝试问问以Scheme开头的计算机科学专业的学生。大概有10%的人会喜欢它,30%的人会尊重它,60%的人会讨厌它。我也并不认为最流行的语言是由C.后裔
赖Joswig

Answers:


59

Lisp是编程语言的查克·诺里斯(Chuck Norris)。

Lisp是衡量其他语言的标准。

了解Lisp可以说明开发人员的启发。

我听说过3个弱点(及其反论点):

  1. 动态输入。

    对于静态类型的语言,有一个论点是围绕为编译器提供足够的信息来捕获特定类别的错误,以便它们在运行时不会发生。但是您仍然需要测试。

    本文主张动态类型化以及更多测试:强类型vs强测试

  2. 很难接。

    实际上有两个部分:学习和工具。

    Lisp付出了一些努力才能真正“获得”,但这是值得的,因为学习Lisp确实可以使您成为其他语言的更好的程序员。例如,一旦真正“获取”了闭包,便会理解Java的内部类。一旦“获得”一流的功能,每次使用没有它们的语言时,您都会感到沮丧。

    我已经读过《The Little Schemer》和《Practical Common Lisp》,两者都很出色。

    接下来是工具。我使用的是Mac,因此我已经使用过Aquamacs Emacs(使Emacs适合新手)和Steel Bank Common Lisp(SBCL)。

  3. 缺乏图书馆。

    我还不能确定,但​​我对此表示怀疑。对于建立网站,HunchentootElephant似乎提供了一套很好的工具。但是,实际上我没有看到Lispers抱怨缺少库(也许是因为Lisp如此强大,所以不需要它们吗?)。


4
解决(3)-您看过Clojure吗?
viksit”,2010年

5
“但是,实际上我没有看到Lispers抱怨缺少库(也许是因为Lisp如此强大以至于不需要它们吗?)。” 我将最后一个语句更正为“(也许是因为Lisp如此强大,它们不需要它们吗?)”,这产生了很大的不同。
Agnius Vasiliauskas,2010年

49
什么也没说,为什么lisp很棒,对我不好。
Kilon

30
因为“ X很棒!X很棒!X像Y,这也很棒,因为我说很棒!” 不是“为什么X被认为很棒?”的答案。政治参考也不合适且无益(大多数人甚至都不认为自由主义是一个好主意)。这三点是有帮助的,但我希望它们不是“它有缺点A ...但实际上甚至不是缺点!”。
最佳

1
Lisp是编程语言的查克·诺里斯(Chuck Norris)。这就是使它变得如此出色的原因。得到它了。不赞成投票。
NiCk Newman

71

“ Lisp是一种可编程的编程语言。”
—约翰·福德拉罗(John Foderaro),CACM,1991年9月

这是我的看法:

从表面上看,Lisp是一种不错的,简单的函数式编程语言。几乎没有语法,所有部分都以逻辑方式组合在一起。

如果您更深入地阅读,阅读SICP并编写一个元圆评估器,您会发现两件事:一,整个解释器(仅包含几个原语)仅是一页代码,其二,代码与数据之间的关系。允许使用优雅的编程技术。

一旦您完全理解了这一点,当其他语言只允许您说几句话时,就好像其他语言一样固定。如果您可以为其定义语法和语义,那么Lisp完全可以构建任何抽象。


1
从理论上讲,您可以将任何语言(例如Rust,Ruby,C,Java,Python,Erlang)嵌入Lisp。因此,Python的S表达式版本(Hy)和Rust的s表达式版本称为(Risp)[尽管我不知道它们的稳定性如何]。如果您使用Hy而不是Python编写代码,则您可以进行宏和结构编辑,例如parinfer / paredit(shaunlebron.github.io/parinfer)。宏允许您将自己的DSL嵌入Lisp中,它们也可以用于通过编译器宏将慢速代码转换为快速代码。您还可以通过转换sexp树来将Python(Hy)代码转换为Rust(Risp)。
aoeu256 '19

我也多次听到这个话。您还会再讲一点@ aoeu256吗?
学生

66

Lisp很好,因为它具有非常简单,规则的语法。

Lisp不好,因为它具有非常少的,简单的常规语法。


4
最小,简单,常规的语法有什么不好?
oskarkv

27
@oskarkv-完全规则的最小语法意味着对任何特定用法都没有偏见。听起来很不错,直到您遇到帕累托原则:偏向最常见的案例,并假装所有案例均具有同等可能性,效率更高。如果您有20%的客户在纽约,而80%的客户在洛杉矶,那么坐在堪萨斯州/俄克拉荷马州边境的栅栏上是否有意义,从而在地理上保持“公正”?还是更明智地去了大多数客户所在的地方?我们更喜欢将其功能偏向可能出现问题的语言。
Daniel Earwicker

4
Lisp语法确实很好。我在Clojure之后学习了Haskell,但是到那时Haskell的语法都感觉像是一个障碍。Lisp的suntax的均匀性非常好。因此,我不完全知道您在说什么偏见。偏执的倾向?听起来不好
oskarkv

3
这样说听起来确实很糟糕。我没有那样说!偏向最常见的情况,最可能的情况?这些(当然)是相对的术语,因此这取决于您在做什么。如果您确实缺乏有关您将要做的事情的任何信息,那就没有必要做准备了。但这可能不是真的-您确实有信息,因此您可以为需要准备的最可能情况做好准备(“偏见”)。
Daniel Earwicker 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.