我正在使用Lisp方言,但也学习了一些Haskell.它们有一些相似之处,但Common Lisp的主要区别似乎是你不必为每个函数,参数等定义一个类型,而在Haskell中你可以这样做.此外,Haskell主要是一种编译语言.运行编译器以生成可执行文件.
我的问题是,有不同的应用程序或用途,像Haskell这样的语言可能比像Common Lisp这样更动态的语言更有意义.例如,似乎Lisp可用于更多底层编程,例如构建网站或GUI,其中Haskell可用于需要编译时间检查的地方,如构建TCP/IP服务器或代码解析器.
流行的Lisp应用程序:Emacs
流行的Haskell应用程序:PUGS Darcs
你同意吗,对此有任何研究吗?
编程语言是思考的工具.如果你愿意努力工作,你可以用任何语言表达任何程序.一种编程语言对另一种编程语言提供的主要价值在于它以不同的方式为您提供多少支持.
例如,Haskell是一种强调根据类型思考问题的语言.如果有一种方便的方式来表达你的问题的Haskell的数据类型,你可能会发现它是一个方便的语言来编写你的程序.
Common Lisp的优势(众多)在于其动态性和同质性(即Lisp程序很容易表示和操作Lisp数据) - Lisp是一种"可编程编程语言".例如,如果您的程序最容易用新的特定于域的语言表达,那么Lisp可以很容易地实现.如果您的问题描述处理类型指定不当或可能随着开发进度而变化的数据,那么Lisp(以及其他动态语言)非常适合.
语言选择通常与任何事物一样是一种美学决定.如果由于兼容性,依赖性或性能原因,您的项目要求不限制您使用特定语言,那么您也可以选择您认为最合适的语言.
你正在打开多罐非常蠕动的蠕虫.首先,整个强类型和弱类型语言都可以.其次,功能与命令式语言可以.
(实际上,我很好奇:"lisp方言"你的意思是Clojure吗?因为它在很大程度上是功能性的并且在某种程度上更接近Haskell.)
可以,然后呢.首先,您可以用几乎任何正常语言编写几乎任何程序,或多或少的努力.强类型的优势在于可以在编译时检测到大量错误.另一方面,较少类型的语言可以更容易编码.Common Lisp很有趣,因为它是一种动态语言,可以选择声明和使用更强的类型,这为CL编译器提供了如何优化的提示.(哦,真正的Common Lisp通常用编译器实现,你可以选择编译或坚持解释代码.)
关于比较无类型,弱类型和强类型语言的研究有很多.这些研究总是要么说其中一个更好,要么说没有可观察到的差异.然而,这些研究之间几乎没有一致意见.
可能有一些明显优势的最大领域是处理复杂的数学问题规范.在那些情况下(加密算法就是一个例子),像Haskell这样的函数语言具有优势,因为它更容易验证Haskell代码和底层算法之间的对应关系.