zoukankan      html  css  js  c++  java
  • golang学习笔记(7)--函数式编程

    一、 函数。

    go语言中函数定义形式类似于python中的函数,如下是go语言中的函数定义:

    func myfun() string {

           return ""

    }

    这是一个普通函数的定义,与其他语言一样,是一个代码块。

    二、 函数是一等公民

    上面说了go语言的函数是一个代码块,其实go语言中的函数与数据类型一样属于一等功能,他不光是一个代码块,他可以作为参数返回,传入等等。如下我们来写一个函数是一等公民的例子:

    func myfun() func(){

           return func() {

                  fmt.Println("函数被调用了")

           }

    }

    该函数的返回值是一个函数,这个函数需要一个函数类型变量来接收:

    a := myfun() //返回一值是一个函数

    a() //调用函数

    如上是这个函数的具体操作。

    三、 闭包。

    函数成为一等公民,那么闭包的概念自然而然就要出来了。闭包的概念需要包括自由变量,局部变量,如下:

    func myfun1() func(int) int{// 函数体

           sum := 0 //自由变量,只要被内部调用了就不会被释放

           return func(i int) int{ // i 是局部变量

                  sum += i

                  return sum

           }

    }

    如上是一个闭包,闭包是一个结构,他被指向的这个变量只要不换指向,那么自由变量就不会被释放,如下看:

           f := myfun1()//同样的函数调用

           fmt.Println(f(1)) // 1

           fmt.Println(f(5)) // 1 + 5

           myfun1()//函数调用完了内部变量就被释放了,不会被继续调用,除了自由变量。

    四、 函数式编程。

    将函数作为一等公民,go语言支持函数式编程,函数式编程是与命令式编程对立的一种编程方式,这种方式我现在无法理解透彻,做个基本的函数式编程操作吧:

    type myfun func(int) (int,myfun)

    func dofun (base int) myfun {

           return func(i int) (int, myfun) {

                  return base + i, dofun(base + i)

           }

    }

    采用递归的编程方式实现与上述加和的策略。

    五、 闭包的应用。

    这里就写一个简单的应用吧,函数编程真的需要时间。

    斐波拉契;

    func fib() func() int{

           a,b := 0,1

           return func() int {

                  a,b = b,a+b//内部调用

                  return a

           }

    }

    我想采用函数式编程个概念来改写:(对函数式编程还是不理解,以后来写吧。)

  • 相关阅读:
    洛谷 1850 NOIP2016提高组 换教室
    2018牛客多校第三场 C.Shuffle Cards
    2018牛客多校第一场 B.Symmetric Matrix
    2018牛客多校第一场 A.Monotonic Matrix
    2018牛客多校第一场 D.Two Graphs
    2018宁夏邀请赛L Continuous Intervals
    2018宁夏邀请赛K Vertex Covers
    BZOJ
    HDU
    ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (ECPC 2015)
  • 原文地址:https://www.cnblogs.com/luohuayu/p/9211554.html
Copyright © 2011-2022 走看看