首页 / 知识
关于范例:函数式编程和非函数式编程
2023-04-13 00:17:00

Functional programming and non-functional programming在大学的第二年,我们被"教"了Haskell,我对它几乎一无所知,更不用说函数式编程了。 什么是函数式编程,为什么和/ xor我想在哪里使用它而不是非函数式编程?我认为C是非函数式编程语言是正确的吗? 功能语言的一个关键特性是一流功能的概念。这个想法是你可以将函数作为参数传递给其他函数并将它们作为值返回。 函数式编程涉及编写不改变状态的代码。这样做的主要原因是对函数的连续调用将产生相同的结果。您可以使用支持第一类函数的任何语言编写功能代码,但有些语言(如Haskell)不允许您更改状态。事实上,你根本不应该产生任何副作用(比如打印文本) - 听起来它可能完全没用。 相反,Haskell采用了不同的IO方法:monads。这些对象包含由解释器顶层执行的所需IO操作。在任何其他级别,它们只是系统中的对象。 函数式编程有哪些优点?功能编程允许编码具有较少的错误潜力,因为每个组件都是完全隔离的。此外,使用递归和第一类函数可以简单地证明正确性,这通常反映了代码的结构。
目前常用的"函数式编程"有两种不同的定义:
较旧的定义(源自Lisp)是函数式编程是关于使用第一类函数进行编程,即函数被视为任何其他值,因此您可以将函数作为参数传递给其他函数,函数可以在返回值之间返回函数。这最终会导致使用高阶函数,例如
较年轻的定义(由Haskell推广)是函数式编程也是关于最小化和控制包括变异在内的副作用,即编写通过组合表达式来解决问题的程序。这通常被称为"纯函数式编程"。这可以通过称为"纯功能数据结构"的数据结构的完全不同的方法实现。一个问题是将传统的命令式算法转换为使用纯功能数据结构通常会使性能提高10倍。 Haskell是唯一幸存的纯函数式编程语言,但是这些概念已经悄悄进入主流编程,使用像.NET上的
到处。 C#中的Lambdas现在已经证明了主要的好处。 C ++ 11有lambdas。现在没有理由不使用高阶函数。如果您可以使用像F#这样的语言,您还将受益于类型推断,自动泛化,currying和部分应用(以及许多其他语言功能!)。
是。 C是一种程序性语言。但是,通过使用函数指针和C中的 可能值得在CoDe Mag最近发布的F#"101"上查看这篇文章。 此外,达斯汀坎贝尔有一个很棒的博客,他发布了很多关于他的F&F速度的文章。 我希望你找到这些有用:) 编辑: 另外,仅仅补充一下,我对函数式编程的理解是,所有东西都是函数,或函数的参数,而不是实例/有状态对象。但我可能是错的F#是我渴望进入的东西,但只是不有时间! :)
John the Statistician的示例代码没有显示函数式编程,因为当你进行函数式编程时,关键是代码没有任何分配(
由于没有副作用规则,每个语句都是返回值的一部分(因此
此外,一切都是不可变的,因此 函数式编程的一些优点包括功能程序更短,更容易修改功能程序(因为没有隐藏的全局效果需要考虑),并且更容易使程序正确第一名。 但是,功能程序往往运行缓慢(因为他们必须进行所有复制),并且它们不倾向于与处理内存地址的其他程序,操作系统进程或操作系统良好地交互,little-endian字节块,以及其他特定于机器的非功能位。非互操作性程度倾向于与功能纯度的程度和类型系统的严格性成反比关系。 更流行的函数式语言具有非常非常严格的类型系统。在OCAML中,您甚至不能混合整数和浮点数学,或使用相同的运算符(+用于添加整数,+。用于添加浮点数)。这可能是优点还是劣势,具体取决于您对类型检查器捕获某些类型的错误的能力的重视程度。 功能语言也往往具有非常大的运行时环境。 Haskell是一个例外(GHC可执行文件几乎和C程序一样小,无论是在编译时还是运行时),但SML,Common Lisp和Scheme程序总是需要大量的内存。 我更喜欢使用函数式编程来保存自己重复的工作,通过制作一个更抽象的版本,然后使用它。让我举个例子吧。在Java中,我经常发现自己创建映射来记录结构,从而编写getOrCreate结构。
这经常发生。现在,我可以写一种函数式语言
而且我再也不必再写一个新的,我可以继承它。但是我可以做一个更好的继承,我可以说在这个东西的构造函数中
(其中*是一种"保持此参数打开"符号,这是一种曲线) 然后本地getOrCreate与我在一行中写出整个事件时没有继承依赖关系的情况完全相同。 是的,你认为C是一种非功能性语言是正确的。 C是一种程序性语言。 如果你正在寻找关于F#的好文章 专家F#由Don Syme共同撰写。 F#的创造者。他专门研究.NET中的泛型,因此他可以创建F#。 F#是在OCaml之后建模的,因此任何OCaml文本都可以帮助您学习F#。 我发现什么是功能编程?有用
更喜欢明确的
过度
|
最新内容
相关内容
python支持r语言吗?
python支持r语言吗?,代码,名称,培训,官网,第一,语言,对象,字符串,方法,后缀,python中可以支持r语言。python提供了一个模块rpy2,可以较好地完python是一种编程语言吗?
python是一种编程语言吗?,放宽,适当,平台,培训,语言,指令,计算机,机器,程序,解释性,python是一种编程语言,Python是一种跨平台的计算机程序设计Python语言中mod表示什么意思
Python语言中mod表示什么意思,环境,培训,表示,语言,结果,负数,语法,符号,两者,规律,python语言中mod表示取模运算符。语法MOD(a,b)通常情况下Python语言专题
Python语言专题,名字,工作,代码,异常,培训,信息,空间,函数,变量,模块,名字空间python使用叫做名字空间的东西来记录变量的轨迹.名字空间只是python到底是什么样的语言
python到底是什么样的语言,教育,软件,人工智能,培训,代码,简介,语言,类型,程序,动态,python是一种面向对象、解释型、动态类型计算机程序设计python语言受欢迎吗
python语言受欢迎吗,代码,工作,业务,活跃,设计,发展,人工智能,培训,数据,语言,python因其简单易用的语法而获得了很多赞誉。该语言强调代码的pythonc语言取余和python取余的区
pythonc语言取余和python取余的区别,培训,资料,语言,负数,区别,被除数,符号,除数,规定,余数,今天看书发现python与C的负数取余运算结果不同,pythonPython和r语言的区别
pythonPython和r语言的区别,数据,分析,流程,培训,工具,系统,服务,平台,代码,语言,Python与R语言的共同特点1.Python和R在数据分析和数据挖掘pythonpython是函数式语言吗
pythonpython是函数式语言吗,培训,代码,函数,概念,指数,状态,语言,变量,计算机,程度,函数是Python内建支持的一种封装,我们通过把大段代码拆成python为什么叫胶水语言
python为什么叫胶水语言,标准,代码,培训,数据,一致,环境,周期性,软件,服务,胶水,什么是胶水语言?胶水语言(gluelanguage)是用来连接软件组件python编程语言有什么用途
python编程语言有什么用途,设计,大规模,软件,培训,数据,平台,工具,生产,面临,通用,Python是一门简单易学的编程语言。阅读好的Python程序感觉pythonPython语言都可以做什么
pythonPython语言都可以做什么,数据,代码,分析,培训,设备,基础,服务,时间,机器,脚本,如果您正在考虑学习Python,或者您最近刚开始学习,您可能会