JS函数式编程【译】5. 范畴论

?? Functional Programming in Javascript 主目录上一章 Javascript中实现函数式编程的技术

第五章 范畴论

托马斯·沃森(时任IBM董事长)说过一句著名的话,“我想全世界只有五台计算机的市场”。
那是1948年,当时,每个人都认为计算机只会被用于两件事情:数学和工程。
即使是技术上最大胆的预想也不会认为有一天计算机能够把西班牙语翻译成英语,
或者模拟整个天气系统。在那时最快的计算机是IBM的SSEC,每秒能计算50次,显示终端要在15年后才出现,
多任务处理意味着多个用户终端共享一个单线程。晶体管改变了一切,然而对技术的远见没有跟上。
在1977年,Ken Olson(DEC创始人)说过另一个愚蠢的预言:“任何人都没有理由想在家里拥有个计算机”。

对于我们来说很明显计算机不只是为科学家和工程师所用,但这只是事后诸葛。在70年前认为计算机只能作数学计算是很正常的。
沃森不仅没有意识到计算机会改变社会,他还没有意识到数学的改革和演进的能力。

不过计算机和数学的潜力并非被所有人忽视。约翰·麦卡锡在1958年发明了Lisp,这是一个革命性的基于算法的语言,
它把计算机带入了新纪元。从那开始,Lisp对使用抽象层的思想(编译、解释、虚拟化)起到重要作用,
这促使了计算机从一个只能用于数学的机器变成了今天这样。

从Lisp到Scheme,一个JavaScript的直接原型。现在它给我们带来了一个轮回。如果计算机在核心上只是一个做数学的机器,
那么它在以数学为基础编程范式上具有优越性是合理的

这里所说的“数学”并不是指计算机明显能做的数字运算,而是要描述为离散数学:对于离散的、
对于诸如逻辑上的声明或者计算机语言命令的数学结构的研究。
通过把代码作为离散的数学结构来对待,我们可以把概念和想法应用到数学上。
这也就是为什么函数式编程在人工智能、图谱搜索、模式识别以及其它计算机科学中具有挑战性的领域里具有如此重要的地位。

这一章我们将针对日常编程中的问题对一些概念和它们的应用进行试验,包括:

  • 范畴论(Category theory)
  • 态射(Morphisms)
  • 函子(Functors)
  • Maybes
  • Promises
  • Lenses
  • 函数组合

利用这些概念我们可以轻松安全地写出整个库和API。并且我们要从对范畴论的解释开始一直到它在JavaScript里的实现。

范畴论(Category theory)函子(FunctorsMonads范畴论的实现第五章总结

下一章 高级主题以及Javascript的缺陷

时间: 2024-09-28 05:01:31

JS函数式编程【译】5. 范畴论的相关文章

js 函数式编程 浅谈

js 函数式编程 函数式的思想, 就是不断地用已有函数, 来组合出新的函数. 函数式编程具有五个鲜明的特点: 1. 函数是"第一等公民" 指的是函数与其他数据类型一样,处于平等地位 2. 只用"表达式",不用"语句" "表达式"(expression)是一个单纯的运算过程,总是有返回值: "语句"(statement)是执行某种操作,没有返回值. 3. 没有"副作用" 指的是函数内部与外

js函数式编程(1)-纯函数

我将写的第一个主题是js的函数式编程,这一系列都是mostly adequate guide这本书的读书总结.原书在gitbook上,有中文版.由于原作者性格活泼,书中夹杂很多俚语,并且行文洒脱.中文译版难免有时需要思量一番,既然读了就写出来,能方便别人最好,也请读者指正.正文如下. 如果一个函数是纯函数,那么其不依赖外部环境,并且不产生副作用. 1.不依赖外部环境,反例如下: const a1 = 10; const aFunc1 = () => { // 依赖外部变量 return a1;

JS函数式编程【译】4.2 函数组合

?? Functional Programming in Javascript 主目录第四章 在Javascript中实现函数式编程的技术 函数组合 终于,我们到了函数组合. 在函数式编程中,我们希望一切都是函数,尤其希望是一元函数,如果可能的话.如果可以把所有的函数转换为一元函数, 将发生神奇的事情. 一元函数是只接受单个输入的函数.函数如果有多个输入就是多元的,不过我们一般把接受两个输入的叫二元函数, 把接受三个输入的叫三元函数. 有的函数接受的输入的数量并不确定,我们称它为可变的. 操作函

JS函数式编程【译】5.3 单子 (Monad)

单子是帮助你组合函数的工具. 像原始类型一样,单子是一种数据结构,它可以被当做装载让函子取东西的容器使用. 函子取出了数据,进行处理,然后放到一个新的单子中并将其返回. 我们将要关注三种单子: Maybes Promises Lenses 除了用于数组的map和函数的compose以外,我们还有三种函子(maybe.promise和lens). 这仅仅是另一些函子和单子. Maybe Maybe可以让我们优雅地使用有可能为空并且有默认值的数据.maybe是一个可以有值也可以没有值的变量,并且这对

JS函数式编程【译】4.在Javascript中实现函数式编程的技术

?? Functional Programming in Javascript 主目录上一章 建立函数式编程环境 第四章 在Javascript中实现函数式编程的技术 扶好你的帽子,我们现在要真正进入函数式的思想了. 这章我们继续下面的内容: 把所有的核心概念放到一个集中的范式里 探索函数式编程之美 一步步跟踪函数式模式相互交织的逻辑 我们将贯穿整章建立一个简单的应用做一些很酷的事情 你可能已经注意到,在上一章我们介绍Javascript的函数式库的时候引入了一些概念, 而不是在第二章<函数式编

JS函数式编程【译】4.1 部分函数应用和珂理化

?? Functional Programming in Javascript 主目录第四章 在Javascript中实现函数式编程的技术 部分函数应用和珂理化 许多语言支持可选参数,但是Javascript不支持.Javascript采用一种完全不同的模式,它任允许意数量的参数传给函数. 这就给一些有趣且非同寻常的设计模式留下了门路.函数可以全部或部分应用. 部分应用在Javascript中的处理方式是:给函数的一个或多个参数绑定上值,然后返回另一个函数接受剩余的未绑定参数. 同样,珂理化的处

JS函数式编程 3.1 Javascript的函数式库

?? Functional Programming in Javascript 主目录第三章 建立函数式编程环境 Javascript的函数式库 据说所有的函数式程序员都会写自己的函数库,函数式Javascript程序员也不例外. 随着如今开源代码分享平台如GitHab.Bower和NPM的涌现,对这些函数库进行分享.变得及补充变得越来越容易. 现在已经有很多Javascript的函数式变成苦,从小巧的工具集到庞大的模块库都有. 每一个库都宣扬着自己的函数式编程风格.从一本正经的数学风格到灵活松

[原创译书] JS函数式编程 2.3 函数式程序员的工具集

?? Functional Programming in Javascript 主目录第二章 函数式编程基础上一节 与函数共舞 函数式程序员的工具集 如果你仔细看了到目前为止出现过的示例代码,你会发现这里面的一些方法不太熟悉. 它们是map().filter()和reduce()函数,它们对任何语言的函数式编程都至关重要. 它们可以让你不必使用循环和语句,写出更简洁的代码. map().filter()和reduce()函数组成了函数式程序员工具集的核心部分,这个工具集包括一系列纯的. 高阶的函

[原创译书] JS函数式编程 前言

前言 函数式编程是一种能够让你编写更聪明的代码的方式,可以减低复杂度,增强模块化. 它是一种通过灵巧地变化.组合.使用函数达到编写简洁代码的方式. Javascript提供了一个实现这些的超赞的途径.Javascript,这个Internet的脚本语言, 它的核心实际上是一个函数式语言.通过学习如何显露出它作为一个函数式语言的真实身份, 我们可以实现强大的.更易维护的以及更可靠的web应用. 通过这些,Javascript的那些怪癖和缺陷将会立刻变得清晰,并且语言本身也将会无限精彩. 学习如何使