Functional programming 现在有Scala、Erlang、Haskell等,为什么要使用LISP

Functional programming 现在有Scala、Erlang、Haskell等,为什么要使用LISP,functional-programming,lisp,Functional Programming,Lisp,据我所知,在过去,LISP是唯一强大的函数式编程语言。现在有很多,为什么人们仍然使用LISP及其奇怪的语法?有没有一种独特的杀手级功能?首先,一般的Lisp,特别是普通的Lisp,更多的是“多范式”而不是“功能性”。从这里开始,我将主要讨论CommonLisp(CL) 不过,并没有“一个杀手特性”。CL是一种可编程编程语言,使元编程变得容易。也就是说,您通常可以直接在该语言中执行“元级别”的操作,而无需使用将文本转换为基础语言的预处理器 CL还有一个非常强大的对象子系统(CLOS),到目前为止,

据我所知,在过去,LISP是唯一强大的函数式编程语言。现在有很多,为什么人们仍然使用LISP及其奇怪的语法?有没有一种独特的杀手级功能?

首先,一般的Lisp,特别是普通的Lisp,更多的是“多范式”而不是“功能性”。从这里开始,我将主要讨论CommonLisp(CL)

不过,并没有“一个杀手特性”。CL是一种可编程编程语言,使元编程变得容易。也就是说,您通常可以直接在该语言中执行“元级别”的操作,而无需使用将文本转换为基础语言的预处理器

CL还有一个非常强大的对象子系统(CLOS),到目前为止,它支持我想用类层次结构和/或方法做的任何事情


就语法而言,我想它与“Algol家族”语言中更为经典的语法有点不同,但它并不比APL更奇怪,也可能不那么奇怪。

有一个独特的杀手特性。这叫做宏观系统。有了宏,你可以扩展你的语言,这使得制作优秀的DSL变得非常容易。用Scala、Erlang或Haskell实现这类功能是很困难的(而且不是很好)

很多Lisper真正喜欢的是语法或缺少语法,因为它带来了很大的一致性,这是许多语言所缺乏的。对于一个标准的C或Java程序员来说,Erlang或Haskell语法也很奇怪,所以语法更糟糕的是它看起来很奇怪

您应该回答的另一个问题是,为什么其他语言比Lisp更好,Lisp缺少什么功能

当然,许多现代语言从Lisp中学到了很多东西,而且还有更多的语言可以用于解决同样的问题

别忘了Lisp不是一种语言,有不同种类的Lisp方言。Scheme、Common Lisp或Clojure等都有不同的焦点


因此,使用哪种语言的问题只能通过尝试来回答,因为每种语言都有其独特之处。有演员的Erlang、Haskell和Scala有这些疯狂的类型系统,Lisp有很棒的宏系统……

如今,人们使用的是Lisp,而不是Lisp。最常用的方言是通用的Lisp、Scheme和Clojure。等等,你把它与Scala、Erlang、Haskell比较,你认为Lisp有“奇怪的语法”?:-)虽然Lisp语法可能是不寻常的,如果你来自C'ish背景,它实际上拥有我所见过的所有语言中最规则的语法。C、 Java等都有各种各样的语法规则,无论什么时候方便,在lisp中,语法都是AST(本质上),因此它非常规则。regular也不意味着wierd。事实上,它通常意味着相反的意思。当我们有Lisp时,为什么现在使用Erlang、Haskell和Scala?有一种Lisp风格的Erlang(LFE),它提供了Lisp语法,将宏带到Erlang。