函数式编程的无状态怎样理解
以下纯属个人理解,如有雷同,那就雷同吧!首先得先确定我们的讨论的状态是什么有状态是指:我可以把我的眉毛摘下来,( ??ω?)ノ??摘下,( ??ω??)安上, ( ??ω?)ノ??摘下,( ??ω??)安上,╰??( ?ω?)ノ??两边都摘下, ( ??ω??)安上。。无状态是指:( ??ω??)卧槽,摘不下来--------------------卖萌结束,回到正常,一般所说的状态可视为\u0026lt;reference, store, value\u0026gt; 这样的三元组(引用,存储, 值),reference也可以叫index或pointer或location,store则可看做是一个接受一个reference返回value的函数(具体实现可以是内存单元,或外部文件等),value就是存储的值了;状态变化则是指两方面了1.reference的改变,2.reference所指的value改变,一般情况下指后者(将名称绑定机制和赋值机制分开,如Java等语言);为什么要有上面的状态?这和为毛往数据库里插数据是一样的:共享状态,它是一个程序不同部分之间的“隐式通信通道”那函数式编程的无状态就是指,以上两者都是不可变的,那么上面的三元组也可以不需要了,也就是变量名称绑定和赋值是一起的,你不能搞一个a 是 undefine。为什么?根源如此。稍微了解一点历史和lambda calculi就知道,lambda 演算中项只能做规约和代换,或者说数学上就是如此,求解一个复杂表达式如 y = 到最后得到:y = 2x,那么y就是一个Nat -\u0026gt; Nat的函数,如果得到y = 2,那么y就是2,很自然,是不是?无状态,是不是?无状态/不共享状态的好处是啥?网上宣传的太多了,什么一个函数同样的参数不管调用多少次都会是返回一样的结果(测试与调试),并行计算(这里尤其多),推理优化等。。。那么无状态真的大丈夫?当然不是,所以才会有CPS,Monad等东西出来,要么通过膜法去模拟有状态,要么就直接上(如:Scala的var关键字)----------------------“副作用” 和上面所说的状态不是一个东西,状态的改变可视为副作用,它是一种“计算效应”
■网友
1.进去的一样……出来的必定一样-2.进去过的东西不因进去过而改变
■网友
对一个函数用同样参数的调用,在任何时候返回的结果都是一样的当然,这这方式是不能解决所有问题的,所以一般也要引入别的技巧来处理I/O、随机数等等
推荐阅读
- 用泡沫箱来养多肉老桩?只要我们把细节做好,同样可以养出状态来
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 换个角度看车市|深度:长城炮越野皮卡1.5万公里长测之技术状态汇总
- 有点计算机基础的人想尽快找份编程的工作。哪种编程的工作最好找还需要学些啥
- 作为软件工程大二的学生,学习一般,编程一般,毕业后能干些啥
- 30岁的人生,想自学一门编程并从事,这个选择怎样呢
- 电子编程书可以边看边练习,价值大吗
- 自学编程知识是自己啃书加实践好还是看视频加实践好好
- 马云说的大数据时代到底是,用到啥技术,如果想要学习大数据技术,要学习哪些基础的东西要先会编程么
- 蔡依林|林峯近照曝光,发福状态不敌大1岁刘涛,身高也被疑作假
