Functor(函子)、Monad(单子)、Applicative
< 返回列表时间: 2020-07-14来源:OSCHINA
还是有点懵逼 ...
函数式编程的主要思想是流程先行, 而非数据先行, 先指定流程, 然后输入数据, 所以操作的数据总是在参数的最后, 并非传统的面向数据的编程方式, 把数据放到前面进行后续操作

https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/ch10.html#%E5%8D%8F%E8%B0%83%E4%BA%8E%E6%BF%80%E5%8A%B1
https://legacy.gitbook.com/book/llh911001/mostly-adequate-guide-chinese/details
圖解Functor,Applicative和Monad
https://zhuanlan.zhihu.com/p/28840109
https://github.com/fantasyland/fantasy-land
https://zhuanlan.zhihu.com/p/44046407
https://www.cnblogs.com/Abbey/p/11000520.html
https://blog.csdn.net/pingyan158/article/details/52764736
https://zhuanlan.zhihu.com/p/88741757
https://www.jianshu.com/p/001ff0dd3c30
https://llh911001.gitbooks.io/mostly-adequate-guide-chinese/content/

说的不错 在命名的时候,我们特别容易把自己限定在特定的数据上(本例中是 articles )。这种现象很常见,也是重复造轮子的一大原因。
+


纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用。

+
“作用”我们可以理解为一切除结果计算之外发生的事情。
副作用是在计算结果的过程中,系统状态的一种变化,或者与外部世界进行的可观察的交互。
副作用可能包含,但不限于: 更改文件系统 往数据库插入记录 发送一个 http 请求 可变数据 打印/log 获取用户输入 DOM 查询 访问系统状态
纯函数总能够根据输入来做缓存


curry 的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。
当我们谈论 纯函数 的时候,我们说它们接受一个输入返回一个输出。curry 函数所做的正是这样:每传递一个参数调用函数,就返回一个新函数处理剩余的参数。这就是一个输入对应一个输出啊。 +

哪怕输出是另一个函数,它也是纯函数。当然 curry 函数也允许一次传递多个参数,但这只是出于减少 () 的方便。

+
这就是 组合 (compose,以下将称之为组合):
组合的结合律 var associative = compose(f, compose(g, h)) == compose(compose(f, g), h);
两个组合的函数, 接受的参数应该在输入和输出关系上一致, 即前者的出口类型对应后者的入口类型 var compose = function ( f,g ) { return function ( x ) { return f(g(x)); }; };
f 和 g 都是函数, x 是在它们之间通过“管道”传输的值。
利用组合率优化代码 var law = compose(map(f), map(g)) == map(compose(f, g));
热门排行