您好、欢迎来到现金彩票网!
当前位置:在线斗牛棋牌游戏 > 尾递归 >

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

发布时间:2019-07-07 15:15 来源:未知 编辑:admin

  好口子网创始人,互联网运营专家,工商顾问专家,财税顾问专家,今日头条、搜狐、网易合约作者。试着把函数想象成一个根据一个指定输入产出指定输出的黑盒,就能简化成逻辑电路中的各种门的样子或者是各种流通管道的样子。

  任何支持函数的语言都可以进行函数式风格的编程 注意到与命令式风格不同的是没有赋值,这意味着reason 程序的时候每个变量的值是不变的 不用考虑程序变量随着时间的变化 -- 大大降低了程序的复杂性。

  既然C/C++(98) 也能进行函数式风格的编程 为什么不认为它是一门函数式语言呢,因为需要容易的进行函数式编程需要以下几个语言特性支持

  按照上面的三条规则函数式是first class 的 是可以直接传递作为参数的,而因为lambda演算作用于是lexical scope 的,variable capture 意味着语言要支持GC才能更方便的操作。 这意味着像Java(8以前), C/C++ 这两门工业界语言函数式编程并不非常适合.

  因为函数可以作为参数,其类型可以非常复杂 比如下面的函数类型其实非常普遍:

  因为函数式风格没有赋值,也就没有for循环, 要实现循环操作 只能通过递归调用, 比如下面简单的例子:

  这需要编译器保证上面的例子不能有stackoverflow 能提供这样保证的编译器并不多,比如所谓的 函数式 语言scala 就不能提供这种保证 也就实际上不是函数式语言.

  1、数据不可变的思维:let a = 100,意义不是把100赋值给变量a,而是把a符号绑定(或者叫匹配)到100。

  2、一切皆表达式思维:if b then 100 else 10,这不是条件跳转,而是一个三元表达式。

  3、函数是第一类值:函数可以作为参数传输,也可以作为结果返回,更可以由一个函数演化成另一个函数。

  这些也只是feature而不是思维。我想知道的是这些feature之后的逻辑。

  再往上说就不接地气了,先从函数式语言说起,函数式语言其实就是模仿人的数学思维而发明的朴素,后来因为离机器太远,不容易优化而被诟病。但科技发展到今天,编译器的优化能力已经很强,软件系统越来越复杂,人的分工越来越细,函数式语言离数学更近,离机器更远,反而成为一种优势,有助于人把问题清晰化。从这个层面看,函数式编程是一种什么思维,就是推离机器的数学思维。这里没有内存、寄存器的想法,在 a=1之后,a 就不可能再等于2,当然你可以在 let a = 1 之后,再 let a = 2,但是这个a 就已经不是那个a,在停留在有内存概念的编程世界里,a 一直是 a,它是装东西的桶或者盒子,只是每次里面装的东西不同。

http://missartypants.com/weidigui/268.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有