Haskell和Python哪个更适合函数式编程?
我在学校上过一门函数式编程的课程,学过Haskell。觉得Haskell有点难用。现在我已经在Python上做了很多工作,发现Python比较简单好用。
Python确实支持一些函数式编程的概念。
我在考虑重新学习函数式编程。用哪个语言编程更好呢?Haskell还是Python?为什么呢?
6 个回答
这个问题提到了我对大家对函数式编程理解的一些不满。拥有像闭包和一等函数这样的语言特性,并不意味着一种语言就是函数式编程语言。函数式编程不仅仅是关于特定的编程风格,还涉及到特定的语言结构。比如,Python有闭包、一等函数,甚至还有一个叫“map”的函数,但这个语言本身更鼓励使用过程式编程、面向对象编程和命令式编程风格;所以即使你使用了函数式的特性,你仍然是在进行命令式编程。
作为一种纯函数式语言,Haskell基本上要求人们以声明式、函数式的风格进行编程,因此毫无疑问,Haskell在函数式编程方面比Python“更函数式”。
在其他地方,你会看到很多人批评Python程序员不应该使用像lambda这样的函数特性。Alex Martelli对此特别有见地。但是,如果你作为一个Python程序员去接触函数式编程,你可能不会真正理解人们为什么对函数式编程感兴趣。特别是,你将无法使用强大的静态类型系统和代数数据类型。这些工具确实是Haskell思维方式的一部分。
函数式编程并不是一堆特性,而是一种思维方式。要想看到这种思维方式的实际应用并开始学习,可以看看John Hughes的论文为什么函数式编程很重要。你从Hughes那里学到的东西,可以很容易地应用到Haskell中。实际上,Haskell更有可能迫使你去学习这种新的思维方式。用Python时,你可能会在某些地方用到几个lambda,误以为自己在学习函数式编程,但其实并不是。
不过,Haskell一下子可能会让人觉得难以接受。如果你觉得有点困难,可以尝试Standard ML或Racket(以前叫PLT Scheme或DrScheme)。Standard ML会给你介绍更多新概念,但他们的社区可能没有像Racket或Haskell那样热情欢迎新手。