zoukankan      html  css  js  c++  java
  • 函数式编程

    函数式编程是一种编程模型,它将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念。

     

    函数式编程的应用场景

    1.数学推理

    2.并行程序

    函数式编程语言的代表语言:Lisp、HasKell、Erlang、Scala,F#

     

    函数式编程的复兴:

    多核并行程序设计的逐渐流行,而命令式编程天生的缺陷却使并行编程模型变得非常复杂,无论是信号量,还是锁的概念,都使程序员不堪其重。

     

    对象是面向对象的第一型,那么函数式编程也是一样,函数是函数式编程的第一型。

    我们在函数式编程中努力用函数来表达所有的概念,完成所有的操作。

    在面向对象编程中,我们把对象传来传去,那在函数式编程中,我们要做的是把函数传来传去,而这个,说成术语,我们把他叫做高阶函数

     

    在数学和计算机科学中,高阶函数是至少满足下列一个条件的函数:

       1.接受一个或多个函数作为输入

            2.输出一个函数

     

    在函数式编程中,函数是基本单位,是第一型,他几乎被用作一切,包括最简单的计算,甚至连变量都被计算所取代。在函数式编程中,变量只是一个名称,而不是一个存储单元,这是函数式编程与传统的命令式编程最典型的不同之处。

     

    一切问题,归根结底到最后都是数学问题。

     

    函数式编程的抽象本质:

    相信每个程序员都对抽象这个概念不陌生。

    在面向对象编程中,我们说,类是现实事物的一种抽象表示。那么抽象的最大作用在就在于抽象事物的重用性,一个事物越具体,那么他的可重用性就越低,因此,我们再打造可重用性代码,类,类库时,其实在做的本质工作就在于提高代码的抽象性。而再往大了说开来,程序员做的工作,就是把一系列过程抽象开来,反映成一个通用过程,然后用代码表示出来。

    在面向对象中,我们把事物抽象。而在函数式编程中,我们则是在将函数方法抽象,函数一样是可重用,可置换的抽象单位。

    那么我们说函数式编程的抽象本质则是将函数也作为一个抽象单位,而反映成代码形式,则是高阶函数。

     

    递归是函数式编程的一个重要的概念,循环可以没有,但是递归对于函数式编程却是不可或缺的。递归充分地发挥了函数的威力,也解决了函数式编程无状态的问题。

    递归其实就是将大问题无限地分解,直到问题足够小。

    而递归与循环在编程模型和思维模型上最大的区别则在于:

    循环是在描述我们该如何地去解决问题。

    递归是在描述这个问题的定义。

     

    惰性求值与并行(感觉很经典)

    惰性求值,相当于就是指,一些未知用处的程序先不执行,在它需要被用到的时候,才会一起执行(这时候就可能会有较多的语句需要被执行,就需要考虑并行的问题了)。

     

  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/NewWork/p/3260592.html
Copyright © 2011-2022 走看看