lisp缺少哪些功能?

ben*_*dbc 9 lisp language-features

我已经读过大多数语言变得越来越像lisp,采用了lisp已经存在很长时间的功能.我想知道,lisp没有什么功能,无论是旧功能还是新功能?通过lisp我的意思是最常见的方言,如Common Lisp和Scheme.

jro*_*way 10

这个问题已被问过一百万次了,但是这里有.Common Lisp是在人们被认为是廉价的时候创建的,并且机器被认为是昂贵的.Common Lisp使人们更容易,而不是让计算机变得更难.Lisp机器价格昂贵; 有DOS的电脑很便宜.这对它的受欢迎程度不利; 与购买更好的计算机相比,用更少表达的语言让更多人犯错误更好.

快进30年,事实证明这不是真的.人类非常非常昂贵(并且供应非常短缺;尝试雇用程序员),而且计算机非常便宜.甚至比污垢便宜.今天的世界需要正是Common Lisp所提供的; 如果现在发明了Lisp,它会变得非常受欢迎.然而,由于它已经有30年历史了(加上!)技术,没有人想过要看它,而是用类似的概念创建自己的语言.那些是你今天使用的那些.(Java +垃圾收集是一项重大创新.多年来,GC一直被人们视为"太慢",但当然,一点点研究,现在它比管理自己的记忆更快.对人类来说也更容易时代如何变化......)

  • 程序员在70/80s便宜?哪个星球?程序员今天很贵?再一次,哪个星球?Java有GC不会使它与Lisp类似."如果Lisp是今天发明的,它将非常受欢迎." 我不这么认为.这已经讨论了几十年,我认为你的大部分都是错的. (6认同)
  • 就创新而言,CLOS非常重要.它也是第一个获得标准的面向对象语言.Common Lisp也是第一次使得在各种机器上以动态语言编写更大的软件成为可能 - 通过指定内置优化功能的语言(如编译器指令,类型声明等).所有Lisps之前有语义问题(编译器和解释器表现不同等)或设计的能力降低(方案 - 只是指定的核心). (4认同)
  • 一个更正:Lisp是(略多于)50岁. (3认同)
  • 好吧,整个lisp家族的巨大优势可以说是Common Lisp之前的事情.实际上,就创新而言,Common Lisp并不是太重要 - 它最大的贡献在于结合以前方言的力量. (3认同)
  • 这就是为什么我说"Common Lisp",它只能追溯到80年代中期.(Lisp机器lisp,maclisp,elisp等) (2认同)
  • 这是非常错误的.例如,Lisp自1959年以来一直使用垃圾收集进行自动解除分配.需要很长时间才能有"主流"语言以这种方式工作.在那之前,昂贵的程序员不得不浪费时间确定何时解除分配事项,这在数据结构不是很简单时是一项艰巨的工作.确实有些事情我们现在做的不同,这会使事情变得更简单,但你的整体表征完全错误. (2认同)

Nat*_*ers 7

  • 传递参考(C++/C#)
  • 字符串插值(Perl/Ruby)(虽然是CL21的一个特性)
  • 好的中缀语法(虽然不太清楚它是否值得)(Python)
  • Monadic'迭代'构造,可以重载用于其他用途(Haskell/C#/ F#/ Scala)
  • 静态打字(虽然不清楚它是否值得)(许多语言)
  • 类型推断(至少不在标准中)(Caml和许多其他)(尽管CL做了一些类型推断,不像Python)
  • 抽象数据类型(Haskell/F#/ Caml)
  • 模式匹配(Haskell/F#/ Caml/Scala /其他)(在CL中,有像optima这样的库)
  • 回溯(虽然不清楚它是否值得)(Prolog)
  • ad-hoc多态性(参见Andrew Myers的回答)
  • 不可变数据结构(许多语言)(可通过库获得,如Fsets
  • 懒惰评估(Haskell)(通过库提供,如clazycl21模块)

(请添加到此列表中,我已将其标记为社区维基.)

这只是指Common Lisp和Scheme标准,因为特定的实现已经独立地添加了许多这些功能.事实上,这个问题有点误.向Lisp添加功能非常容易,因为拥有一个没有很多功能的核心语言会更好.这样,人们可以自定义他们的语言,以完全满足他们的需求.

当然,有些实现将核心Lisp与一堆这些特性打包为库.至少对于Scheme,PLT Scheme提供了所有上述功能*,主要是作为库.我不知道Common Lisp的等价物,但可能有一个.

*也许不是中缀语法?我不确定,我从来没有找过它.

  • 我很确定我已经看过至少其中3个的Common Lisp库.:-) (4认同)
  • 纠正我,如果我错了,但不是使用具有特化的defgeneric/defmethod在CLOS中实现的ad-hoc多态?我只是在学习Lisp,但是从我所读到的CLOS听起来它提供了我从C++类层次结构中获得的所有相同的东西,但是以不同/更灵活的方式. (3认同)
  • 如果一种语言允许在库中实现某些东西,就好像它是语言的一部分一样,那么它是否有任何方式使它更糟糕的是它不是正式"在语言中"?这在C/Java /等中是一个大问题,其中库和语言非常不同,但Lisp的主要优点似乎是它们不是. (3认同)
  • 这是误导性的,因为"标准"在这里并不重要......为了使其正确,应该澄清的是,lisp(和方案)的最大优点是它能够改变和适应 - 并获得许多这些功能.例如,PLT Scheme是一种lisp/scheme方言,它具有这些特征中的每一个. (2认同)