哪个是更具功能性的编程语言,Haskell还是Python?

时间:2009-12-22 10:57:24

标签: python haskell functional-programming

在学校的功能编程课程中学过Haskell。发现Haskell有点难以使用。现在已经在Python上做了很多工作。 Python很容易使用。

Python确实支持一些函数式编程结构。

正在考虑重新审视功能编程。什么是更好的代码语言? Haskell还是Python?为什么呢?

6 个答案:

答案 0 :(得分:38)

Haskell 一种函数式编程语言,而Python 只是函数式编程语言的一些功能。所以,这已经解决了。 Q.e.d。

编辑optimization of recursive function calls只是提供一个示例,而Python缺少的是什么。这在大多数真正的函数式编程语言中至关重要。

顺便说一下,谷歌搜索产生了this nice article

答案 1 :(得分:33)

你会在其他地方发现许多关于Python程序员不应该使用像lambda这样的功能特性的批评。 Alex Martelli特别擅长这一点。但是,如果您将函数式编程作为Python程序员进行处理,那么为什么人们首先会对函数式编程感兴趣,您将无法理解。特别是,您将无法访问功能强大的静态类型系统和代数数据类型。这些工具绝对是Haskell心态的一部分。

功能编程并不是一组功能,而是一种思维方式。要了解这种思维方式并开始学习,请查看约翰休斯的论文Why Functional Programming Matters。你从Hughes那里学到了什么,你可以很容易地在Haskell中应用。事实上,Haskell更有可能强迫你学习这种新的思维方式。使用Python,你可以在这里和那里使用一些lambdas,并欺骗自己,你正在学习函数式编程。你不会。

也就是说,Haskell可以同时吞下很多东西。如果您发现困难,可能需要尝试Standard MLRacket(以前称为PLT Scheme或DrScheme)。标准ML将向您介绍更多新想法,但是这些人并没有像Racketeers或Haskell那样一起欢迎新人。

答案 2 :(得分:11)

这个问题突出了我对函数式编程的共同理解之一。具有闭包和第一类函数等语言功能不会使语言成为函数式编程语言。函数式编程与编程的特定样式一样多,因为它与特定的语言结构有关。 Python有闭包,第一类函数,是的,甚至是一个叫做“map”的函数,但是语言本身鼓励程序化,OOP,命令式编程风格;因此,即使您使用了功能特性,您仍然需要编程。

作为一个纯函数式语言,Haskell基本上要求一个程序采用声明式,功能样式,因此,Haskell比Python更“功能性”。

答案 3 :(得分:7)

虽然Python确实支持一些功能构造,但Haskell 一种功能语言。你还需要考虑的是,Haskell也是纯粹的功能 lazy ,这两个概念可能是你在Haskell中遇到困难的原因。如果是这种情况,请继续阅读。

当你有时间的时候,你可能想要考虑的是学习另一种不那么复杂的功能性语言。我发现在转向Haskell之前学习一种不那么“具有攻击性的功能”语言是值得采取的步骤。您可能需要考虑另一种函数式编程语言OCaml(Objective Caml),它不是纯粹的也不是懒惰的。因此,一些命令式编程结构将可供您使用(引用,循环,可变数组等),并且您不必在实际需要之前处理monad。

这完全取决于您愿意花时间重新访问函数式编程的时间,以及您在同一范例中的当前背景。

答案 4 :(得分:0)

Boldewyn说。 Haskell是中最“硬核”的函数式语言之一,因为根本没有任何方法可以保持可变状态

也就是说,Haskell(毫不奇怪)与大多数人接触到的所有命令式和混合模式语言截然不同,因此,如果一个人来自一个背景,就会有一个学习曲线,如果一个人来自,VB或C(++)或Java。

另一方面,Python提供了一个“功能展示和讲述”部分,其中一些功能特性可以在一个主要强制要求的环境中进行测试驱动。

因此,如果在他最初的问题中,OP的“更好”意味着“更多功能”或“更好的功能土地公民”(因为他已经更清楚了),那么Haskell“胜利”了。

答案 5 :(得分:-4)

来自Haskell homepage

  

Haskell是一种先进的纯函数式编程语言。作为一项二十多年前沿研究的开源产品,它可以快速开发出健壮,简洁,正确的软件。

讽刺译:

  • “advanced”=“不适合所有人”
  • “纯粹功能性”=“绝对不适合所有人”
  • “超过二十年”=“仍然不是每个人都喜欢它!”
  • “前沿研究”=“你有可能找到一个可以用它来解决的实际问题,但我们仍然在研究它!”
  • “健壮,简洁,正确的软件”=“你是否缺少简单,易懂,明显,可读?猜猜原因!”
除了笑话之外,功能语言并不适合大多数人而且永远不会。有些人可以像堆栈一样思考,但我个人更喜欢计算机更难以理解我的胡言乱语。