当前位置:首页 » 编程软件 » c函数式编程

c函数式编程

发布时间: 2022-05-03 02:48:55

A. 在python常说的函数式编程是什么意思

函数式编程相对应的是命令式编程
比方说你要定义一个方法
命令式编程如下:
def func1():

而同样功能的函数式编程如下:
func1 = lambda :

B. 式编程,命令式编程()和函数式编程的区别

编程语言主要有四种类型

  • 声明式编程:专注于”做什么”而不是”如何去做”。在更高层面写代码,更关心的是目标,而不是底层算法实现的过程。
    ex: css, 正则表达式,sql 语句,html, xml…

  • 命令式编程(过程式编程) : 专注于”如何去做”,这样不管”做什么”,都会按照你的命令去做。解决某一问题的具体算法实现。

  • 函数式编程:把运算过程尽量写成一系列嵌套的函数调用。
    函数式编程强调没有”副作用”,意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。
    所谓”副作用”(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。

C. 求科普什么是函数式编程语言

实际上,函数式编程没有一个严格的官方定义。严格上来讲,函数式编程中的“函数”,并不是指我们编程语言中的“函数”概念,而是指数学“函数”或者“表达式”(例如:y=f(x))。不过,在编程实现的时候,对于数学“函数”或“表达式”,我们一般习惯性地将它们设计成函数。所以,如果不深究的话,函数式编程中的“函数”也可以理解为编程语言中的“函数”。

D. 函数式编程有哪些优点

对于函数式编程,你可以学习一下haskell。
重点的优点是语法灵活(在高阶函数里,你可以把函数当做参数传,类似于C的函数指针),语法简洁,类型和数据安全,多态支持性等等。

E. 到底什么是函数式编程思维

“简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。”

摘自阮一峰先生的文章:《函数式编程初探》


就我个人理解,函数式编程是介于面向对象与面向过程的,中间性编程方法,具体且更为严谨的介绍,请网络“函数式编程初探”。

函数式编程要求大量的使用函数来代替变量,形成富有逻辑且简洁易用的代码,极端的FP和极端的OOP已经在编程界引起一定反思(FP到最后,就会导致逻辑紊乱,而OOP到最后,会导致维护的艰难)。

在这里附上函数式编程的特点(在“函数式编程初探”中,有部分条目的具体解释):

  1. 第一等公民是函数

  2. 带有闭包的Lambdas/Anonymous函数

  3. 不变性,大部分无态处理,没有状态和变量

  4. 高并发

  5. 无副作用的调用

  6. 通过tail call实现递归的性能优化。

  7. 模式匹配(Haskell, Erlang)

  8. 懒赋值(Miranda, Haskell)

  9. Homoiconicity(类似LISP)

F. 什么是函数式编程

在维基网络中,已经对函数式编程有了很详细的介绍。
那我们就来摘取一下Wiki上对Functional Programming的定义:
In
computer science, functional programming is a programming paradigm that
treats computation as the evaluation of mathematical functions and
avoids state and mutable data.
简单地翻译一下,也就是说函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。

G. 什么是函数式编程思维

回答都有跑题,show概念之嫌,题主问的是函数式思维,这个问题我一直在思考,毕竟是方法论,能力有限,只能从切身实践告诉你
1.表达式化

最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在荒山野岭让你感受一下,离开熟悉的环境,地球依然在转,但是有个
重点,那就是一切都是表达式; 为什么是表达式呢?这个问题就像为什么鱼在水里?
因为函数式建立在lambda演算之上而非图灵机,只不过两者被证明等价,所以你可以在你的机器上跑全是表达式的代码,就如有人证明天空适合鱼生存,所以
鱼可以在天上游
当你接受了鱼可以在天上游之后,就该上正餐了

1.5 数据与行为分离
这也是和面向对象不一致的地方,面向对象强调数据与行为绑定,但函数式不是,确切的说函数式 函数与数据等价,所以你才可以将函数当参数与返回值,你在设计时,切勿让数据自己长腿能跑,其次,行为必须消除副作用,不可以偷偷把数据改了,习惯第一条后,应该不会的

2.高阶逻辑

了函数式,就不要在想循环,赋值这些低阶逻辑了,而应该更高阶的思考问题,这比转化表达式更难,函数式又叫声明式,也就是你要做什么,只要说一下就行,而
非写个遍历,做个状态判断,用函数式你不需要考虑这些,你不知道函数式的列表是怎么遍历的,中间向两边?
从后往前?这也是为何函数式适合并发的原因之一,你想知道列表中大于3的数有多少,只要,list.count(_ > 3)
而不是写循环,你可以直接写你的业务,不要拘泥于细节,有点像sql, 你需要什么告诉电脑就行,你或许会问,count foreach filter
这些函数怎么来的? 因为有了他们你才不需要写循环,他们把你留在高阶逻辑中,这个问题的答案请看下面

3.组合子逻辑 或又叫 自底向上的设计

数式和OO是反的,面向对象是自顶向下的设计,函数式是自底向上的设计,也就是先定义最基本的操作,然后不断组合,不断堆积以满足你的所有需要,如sql
定义了select, from, where...这几个组合子,来满足你的查询需求,同理函数式语言会提供foreach,
map等组合子(操作)来满足你的需求,所以你必须自下而上的设计你的代码结构,并且满足你的需求,当你只用组合子写代码时,你会发现你写的全是高阶逻辑

果这些已有组合子满足不了你,你就得自己写,foreach不行,你就自己写递归,我告诉你,递归背后也是组合子,这里一些'大神'应该不知道,在图灵机
里,递归就是方法不断调用自己没什么好说的,但是在lambda演算中,匿名函数是没法调用自己的,所以递归是用Y组合子(又叫不动点组合子)把递归函数
自己求解出来再调用的,这才可以实现递归,并与图灵机的循环等价,有点跑题了,总之要想顺手的写函数式,最好用面向组合子的设计,注意,不是必须,组合子
演算和lambda演算可以相互转化,也就是,你完全可以写一堆杂乱的表达式,但没有组合子逻辑来得清爽,Haskell大规模使用monad这个特殊组
合子,始其变得统一整洁

好了,总结一下
函数式思维,其实就是组合子逻辑,用简单的几个函数组合来构建复杂逻辑,始终以高阶的角度去表达问题,而非依赖副作用。
知道这点,你用java也可以写函数式代码了

但是,这也只是本人积累得来的感悟,绝不敢大肆伸张这就是函数式,我也在不断研究中,如有问题,还望大神指正

H. 函数式编程的特点

其实函数式编程的话你也要学计算机就会知道。

I. 函数式编程有什么弊端

我接触过Haskell、Clojure和其他语言,也做过PL的“研究”。可以浅谈一下:

  • 函数的复杂度

分析Haskell程序的时间和空间复杂度是很麻烦的。首先编写Haskell程序往往是很多“重用”内置/自定义数据结构,以实现数据持久性(或“不变性”)可以增加空间和时间消耗(实现策略有很多,但采取临时解决方案不影响永久治愈),优点是控制副作用。然后,函数组合和高阶函数可能代价昂贵,可以生成额外的中间数据。其优点是抽象能力强,模块化是有益的。最后,惰性评价使过程评价模型复杂,滥用可导致效率的降低。功能语言的分析工具也较少。

但是这些提供了细粒度的模块化,程序员需要更多的“设计”。“使用函数式编程的程序员必须努力确保程序使用更小、更简单、更通用的模块,”Huges说。这是一个挑战。

而且,模块之间的交互也是一个问题。

热点内容
微信qq音乐缓存 发布:2025-05-14 16:16:16 浏览:468
c语言回收内存 发布:2025-05-14 16:16:08 浏览:143
2021国产安卓顶级旗舰买哪个 发布:2025-05-14 16:15:36 浏览:300
linux自学视频 发布:2025-05-14 16:14:49 浏览:255
我的世界服务器崩了重启 发布:2025-05-14 16:09:37 浏览:44
android深拷贝 发布:2025-05-14 16:09:35 浏览:153
cf电脑版转服务器神器还在吗 发布:2025-05-14 16:09:02 浏览:211
百度文库服务器如何搭建 发布:2025-05-14 16:09:00 浏览:248
安卓微信删除的好友怎么找回 发布:2025-05-14 16:08:56 浏览:706
iphone的访问限制密码忘记了怎么办 发布:2025-05-14 16:08:56 浏览:184