美文网首页
函数式编程和柯里化的定义

函数式编程和柯里化的定义

作者: 吴晗君 | 来源:发表于2019-04-19 21:46 被阅读0次

函数式编程

函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声明式的编程范式,通过表达式和声明而不是语句来编程

 function compose(...funcs) {
     if (funcs.length === 0) {
       return arg => arg
     }

     if (funcs.length === 1) {
       return funcs[0]
     }
     return funcs.reduce((a, b) => {
       return (...args) => {
         return a(b(...args)) 
       }
     })
   }

   function fn1(x) {
      console.log('a')
      return x + 1
    }

    function fn2(x) {
      console.log('b')
      return x + 2
    }

    function fn3(x) {
      console.log('c')
      return x + 3
    }

    function fn4(x) {
      console.log('d')
      return x + 4
    }
    let composedFn = compose(fn1,fn2,fn3,fn4)
    let result = composedFn(1)

第一步,循环返回的第一个值是函数X,看下一步,所以X的参数就是fn3的返回值,
也就是说fn2的参数就是fn3的返回值

(...args) => {
   return fn1(fn2(...args)) 
 }

第二步, 循环返回的第二个值是函数Y

(...args) => {
  return X(fn3(...args))
}

第三步,reduce返回的第三个值是函数Z,这个函数作为reduce的最终返回值赋值给了composedFn

(...args) => {
  return Y(fn4(...args))
}

第四步,执行composedFn(1),也就是上一步fn4的参数是1.连起来执行就是从后往前一个一个执行

let composedFn = compose(fn1,fn2,fn3,fn4)
let result = composedFn(1)

柯里化

计算机科学中,柯里化(英语:Currying),是把接受多个参数函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

上面redux的例子中函数式编程用的很好,柯里化还真没在网上看到好的例子,全是a+b的例子...

相关文章

  • Swift函数式编程与面向协议编程

    函数式编程(FP) 一、函数式编程(FP)-高阶函数 二、函数式编程(FP) - 柯里化(Currying) 三、...

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • 函数式编程(三)—— 柯里化

    柯里化Lodash中的柯里化 —— curry()案例柯里化原理模拟柯里化总结 【函数式编程总体设计】 之前讲了函...

  • 函数式编程和柯里化的定义

    函数式编程 函数式编程是一种编程范式。它把计算当成是数学函数的求值,从而避免改变状态和使用可变数据。它是一种声明式...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • 什么是柯里化

    柯里化的概念 在函数式编程(Functional Programming)相关的文章中,经常能看到柯里化 (Cur...

  • 函数式编程

    目录 [TOC] 课程介绍 为什么要学习函数编程以及什么是函数编程 函数式编程的特性(纯函数、柯里化、函数组合等)...

  • 函数式编程及柯里化概念入门

    函数式编程:与之对应的是命令式编程。命令式编程强调的是实现过程。函数式编程强调的是输入与输出的对应关系 柯里化:C...

  • 函数式编程入门

    编程思路的概念[补充] 函数式编程思维范畴论基本理论基本概念纯函数函数的柯里化函数的组合Point Free声明式...

  • 函数式编程与面向对象编程[1]: Lambda表达式 函数柯里化

    函数式编程与面向对象编程[1]: Lambda表达式 函数柯里化 高阶函数.md 之剑 2016.5.2 11:1...

网友评论

      本文标题:函数式编程和柯里化的定义

      本文链接:https://www.haomeiwen.com/subject/atthgqtx.html