当前位置: 首页 > 科技观察

函数式编程的第二春?揭秘其复兴背后的原因

时间:2023-03-19 11:47:33 科技观察

ThomasKuhl提出了“科学革命”范式理论,RobertFloyd在他1979年的图灵奖演讲中使用了编程范式一词。编程范式,简单地说,就是一种编写命令的方式。众所周知,一门语言的思想是建立在它的编程范式之上的。三个著名的范例是面向对象编程、命令式编程和函数式编程。它们没有好坏之分,重要的是使用正确的工具来完成工作。其中,函数式编程是大多数软件工程师并不熟悉的一个概念。函数式编程是一种将计算机操作视为函数计算的编程风格。函数式编程语言非常重要的基础是lambda演算(lambdacalculus),lambda演算的函数可以接受函数作为输入(参数)和输出(返回值)。与指令式编程相比,函数式编程强调函数的计算比指令的执行更重要。与过程式编程相比,函数式编程中函数的计算可以随时调用。Lisp是第二种用于编写计算机程序的编程语言,实际上属于函数式范式。函数式编程通过简化编程定义来优先考虑数据不变性和数学计算,而不是像传统编程那样修改存储在类构造函数中的对象。在现代函数式编程中,这种思维有点狭隘,但未必是坏事。函数式语言的可变性为函数式编程带来了很多功能。可以说函数式编程非常实用。考虑到这一点,函数式编程并不局限于像Python这样具有函数式特性的函数式语言。尽管函数式编程与传统编程有很大不同,但函数式和面向对象的范式似乎与大多数用于数据科学的语言比较接近。适合我们的工作大多数函数式语言的标题中都有“统计”一词。这很方便,因为数据科学家很像统计学家,只是具有编程和机器学习技能。对于数据科学家来说,函数式语言通常更快更容易使用。相信我,您不想快速浏览C代码,因为那样不太准确。大多数函数式语言都具有完美的可读性并且非常容易编写和学习。某些人可能会感到惊讶,函数式编程是互联网上最古老的大数据管道的基础。随着机器学习和数据计算的发展,函数式编程逐渐流行起来。很酷的语言有很多很酷的统计语言,其中许多将自己的特性与其他传统语言交织在一起。我特别喜欢以下函数式编程语言。R语言R语言是我们的老朋友。R是一种传统的函数式语言,但与大多数其他语言一样,它是(或已经成为)多范式的,也就是说,您可以从每个特定的编程范式中挑选自己喜欢的范式。这赋予了R语言可变性的优势。R语言起源于S语言,一直专注于统计计算。JuliaJulia一直是我最喜欢的编程语言。虽然它是函数式的,但它确实包含一些可变的、面向对象的属性,使编程更容易。作为一种高级语言,Julia的速度非常快。它易于键入,在正确声明时可以像C一样快,并且比R或Scala更具可读性。一般来说,使用Julia的好处之一是构建模型和训练它的时间不会太长,因为语言简单且机器学习(ML)速度很快。在某些情况下,例如在我的ML包Lathe中,机器学习可以用很少的代码行完成,并且可以通过使用参数动态更轻松地修改构造函数的属性。HaskellHaskell与上面提到的多范式语言完全不同。它以其纯粹的功能而闻名。我从未使用过Haskell,所以不能代表它,但据我所知,Haskell是一种非常酷的语言。我对Haskell的了解有限。如上所述,大多数现代语言都是多范式的,这使得它们可以在不创建新代码库的情况下高效地修复错误。Lisp虽然Lisp在数据科学界不一定很有名,但它仍然是一种很酷的语言。Lisp和Julia一样,可以让编程变得非常方便和简单。一个非常值得注意的特性是Lisp和Julia的宏。宏本身是一个主要的功能特性,如果使用得当,可以使笔记本中的编程变得更加容易。请注意,Lisp已将自己划分为一组语言,其中包括Scheme、Clojure和(通用)Lisp。作为二级语言,很难探索或估计它及其特性的影响,但影响范围肯定是相当大的。作者对茱莉亚的喜爱想必是不言而喻的。之前有发表过相关文章介绍Julia。虽然有时候Python的构造函数(类)可能更适合特定的任务,但总体来说,Julia也能完成工作,而且对我来说更流畅、更高效。对于其他人来说,函数式语言可能达不到他们的目的,而对于那些一直使用面向对象语言的人来说,可能更难学。归根结底,编程语言是一种选择,而且大多数编程语言都有开发人员,它们也有各自的优点和缺点,所以没有好坏之分,就看你个人的编程习惯和优先!