首页 > 编程语言 >函数式编程

函数式编程

时间:2022-11-19 10:11:21浏览次数:35  
标签:right return 函数 编程 Either 函子 left

函数式编程

  1. 函数是一等公民,函数式的思想来源于数学运算,而柯里化的操作可以将多参函数转为单参函数,而单参函数一般希望是纯函数(即不存在副作用的函数),可以实现f(g(x))这样的合并操作的函数(通过队对外接口map方法实现变形),函数式的核心思想是基于函数或者说函子进行计算。
  2. 函子(即容器,一般拥有基本数据和map接口),函数式一般规定使用of来替换new操作

Maybe函子:可以对空值等问题进行检测:

class Maybe extends Functor {
  map(f) {
    return this.val ? Maybe.of(f(this.val)) : Maybe.of(null);
  }
}

Either函子:替换if...else,可以用于提供默认值,还有替换掉try...catch.

class Either extends Functor {
  constructor(left, right) {
    this.left = left;
    this.right = right;
  }

  map(f) {
    return this.right ? 
      Either.of(this.left, f(this.right)) :
      Either.of(f(this.left), this.right);
  }
}

Either.of = function (left, right) {
  return new Either(left, right);
};

ap函子:部署了ap方法的函子,当想要基于另一个函子内部的值进行计算时使用,相当于可以进行链式调用。

class Ap extends Functor {
  ap(F) {
    return Ap.of(this.val(F.val));
  }
}

Monad函子:拥有一个flatMap方法,总是返回一个单层的函子,意思是把嵌套的函子铺平。

//这里应该才两层嵌套
class Monad extends Functor {
  join() {
    return this.val;
  }
  flatMap(f) {
    return this.map(f).join();
  }
}
//函数式在IO操作中的应用(将不纯的函数保装成纯函数来实现):

var tail = function(x) {
  return new IO(function() {
    return x[x.length - 1];
  });
}

readFile('./user.txt')
.flatMap(tail)
.flatMap(print)

// 等同于
readFile('./user.txt')
.chain(tail)
.chain(print)

标签:right,return,函数,编程,Either,函子,left
From: https://www.cnblogs.com/mengyiqwq/p/16905532.html

相关文章

  • sql 函数
               ......
  • ES6之函数参数默认值
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>函数......
  • OpenCV常用函数
    1.读取图像cv2.imread(filename,[,flags])2.色彩空间转换dst=cv2.cvtColor(src,code,[,dstCn])code是色彩空间转换码dstCn是目标图像的通道数。如果参数为默认值......
  • Python全部内置函数详细认识(上篇)
    ......
  • 15.DataFrame的重要函数
    importpandasaspddata=[['小太阳',320.9,100],['鼠标',150.3,50],['小刀',1.5,200]]columns=['名称','单价','数量']df=pd.DataFrame(data=data,colu......
  • 并发编程(部分讲解)
    同步、异步、阻塞、非阻塞概念前言在实际的开发中,经常会听到同步,异步,阻塞,非阻塞这些编程概念,每次遇到的时候都会蒙圈,尤其是在一些场景下同步与阻塞,异步与非阻塞感觉没啥......
  • 并发编程
    并发编程同步与异步用来表达任务的提交方式同步提交完任务之后原地等待任务的返回结果期间不做任何事可靠任务序列异步提交完任务后不等待任务的返回结果直接去......
  • 并发编程
    内容概要并发编程理论与操作系统发展史多道技术近程理论及调度算法内容概要同步与异步阻塞与非阻塞创建进程的两种方式进程join方法进程间数据隔......
  • 网络编程与并发
    今日内容同步与异步用来表达任务的提交方式同步 提交完任务之后原地等待人物的返回结果期间不做任何事异步 提交完任务之后不原地等待任务的返回结果直接去做其......
  • python使用反函数还原输入
    importnumpyasnpimportmatplotlib.pyplotaspltfrompynverseimportinversefuncdefmy_tah(x):sigma=-0.1#base_tah=np.tanh(x)#base_......