Functional programming 为什么要为项目选择Lisp?

Functional programming 为什么要为项目选择Lisp?,functional-programming,lisp,Functional Programming,Lisp,我正在寻找Lisp(任何方言)提供给项目的具体和独特的特性,与其他主要功能性语言相比 例如,Haskell提供了惰性评估、纯度和类型系统,有助于构建更正确的程序。Erlang通过使用独占消息传递、轻量级进程等,使并发编程变得更容易 LISP带来了什么?对于某些项目,是什么使它比其他语言更好?其他语言所缺乏的使其适合的特征是什么 我不是在抨击口齿不清;我想更多地了解它,以及如果今天使用它,它会带来什么好处。请具体说明:)当我问自己类似于你的问题时,我搜索并找到了这篇文章: 它没有太多的细节,

我正在寻找Lisp(任何方言)提供给项目的具体和独特的特性,与其他主要功能性语言相比

例如,Haskell提供了惰性评估、纯度和类型系统,有助于构建更正确的程序。Erlang通过使用独占消息传递、轻量级进程等,使并发编程变得更容易

LISP带来了什么?对于某些项目,是什么使它比其他语言更好?其他语言所缺乏的使其适合的特征是什么


我不是在抨击口齿不清;我想更多地了解它,以及如果今天使用它,它会带来什么好处。请具体说明:)

当我问自己类似于你的问题时,我搜索并找到了这篇文章:

它没有太多的细节,但给出了为什么Lisp有意义的粗略描述。我发现它非常有用(而且整个网站都很有用,比如说,像那里的帖子)

Haskell提供了惰性评估

Clojure序列函数是惰性的。您可以使用无限列表,就像在haskell中一样:

(take 10 (cycle ["odd" "even"]))
纯洁

Clojure类型是不可变的。这使得你的程序的大部分都是纯粹的,而不是强迫你爬上象牙塔:)而且它有STM,就像haskell一样

和类型系统

不幸的是,lisps在这里无法与haskell竞争。大多数口齿不清是动态的

但Lisp及其VM(映像)的动态特性使其成为服务器端程序(如web应用程序)的绝佳选择。连接到web应用程序的运行实例、动态更改功能甚至整个模块非常容易,无需重新启动应用程序或驱逐用户。这对于haskell来说要么是不可能的,要么是非常麻烦的

大多数Lisp提供了一种编写宏的非常简单的方法。您可以用同一种语言编写宏

有了Haskell,您将不得不学习另一种语言(模板Haskell),这种语言要复杂得多,至今还没有正确的文档记录。你将很难学会它

话虽如此,我使用并热爱lisp(clojure)和haskell。我更喜欢haskell,因为它拥有所有实用开发语言中最强大的类型系统


此外,它比蘑菇更能弯曲你的思维:)

方案提供和。我不确定还有哪些其他fp语言也提供了这些功能。

我认为这更适合程序员使用。stackexchange.com如果附带一些具体的项目描述。是的,就在我发布了:)标记了这个问题,并希望一些版主能尽快移动它。这个链接确实很有趣,但我觉得它并没有真正回答我的问题。。它展示了函数式编程的优点,这在其他语言中是可能的(例如,Haskell特别宣传DSL)。我的问题是Lisp给函数范式带来了什么新的东西?杀手级功能让你想用Lisp方言写你的项目,因为你在其他语言中找不到它。好吧,这就是重点——在我看来,它没有。你好,Lisp和
Lisp宏
我认为这样说最好。Lisp所拥有的是-code=data,它支持宏,使您能够根据需要定制Lisp。这是Lisp所独有的,它让你自由地用任何方式来塑造它。它也非常简洁-尤其是Clojure,您有很多方法可以使代码比其他语言短得多。请注意,Lisp在默认情况下不起作用(与例如Haskell相比),例如,您可以很高兴地强制使用它。还可以看到:。您对宏的看法是正确的,它们非常强大,特别是因为宏语言是Lisp本身。这个宏机制是Lisp提供的其他函数式语言没有的最大功能吗?@Adi,它与函数式编程无关。实际上,您可以定义一种完全不支持FP的Lisp方言,这纯粹是命令式的,但仍然具有大多数Lisp优势。Lisp之所以不同是因为两件事:同源性和宏。其他的都可能有所不同,但这两件事很重要。我真的很喜欢你的回答:)谢谢!但我仍然看不到Lisp的杀手级功能,即使是一个web应用程序,也无法让您在其中编写项目。例如,Erlang是专门为支持热插拔代码、100%正常运行时间等而设计的:)这使得在其中编写Web应用程序的后端非常好。一些ML方言也提供了延续。而卫生宏则不如普通的lisp风格的纯宏。卫生宏和C++模板一样强大(而且不超过它),这是可悲的。@ SK逻辑>代码>语法规则< /C> >比 DeFrac宏要小。然而,code>语法case严格来说比
defmacro
更强大(因为你可以很容易地在
语法case
方面实现ANSI CL的
defmacro
,但反之亦然)。@Matthias Benkard,因为你可以通过
语法case
(这只在R6RS中正式出现)来规避卫生问题,这不是一个卫生宏观体系。纯粹卫生的宏观体系总是不够灵活。顺便说一句,你也可以在
defmacro
的基础上实现
syntax-case
,所以它不是“更强大的”。@SK-logic-IMHO,一个不纯的卫生宏系统(
syntax-case
,显式重命名,语法闭包等)仍然是一个卫生的宏系统,就像一个不纯的函数语言仍然是一个函数语言一样;但不管怎样,这只是对定义的吹毛求疵。无论如何,我不相信你可以只使用ANSI CL
defmacro
来实现
syntax case
。如果您有足够的权限访问词法环境,您可以这样做,但这不是ANSI,而且我甚至不知道有一个半便携的兼容性库可以提供