zoukankan      html  css  js  c++  java
  • 范畴、类型、复合、函数式编程

    范畴是一系列有联系的概念的集合;

    类型关乎复合

    范畴论与箭头的复合有关。但是并非任意两个箭头都可以复合。一个箭头的目标对象必须与下一个箭头的源对象相同,这样的两个箭头方能复合。在编程中,我们将一个函数的返回结果传递给另一个函数。如果目标函数不能正确的解析源函数传递来的数据,程序就不会工作。首尾必须相连,方能实现复合。编程语言的类型系统越强,箭头的配合就越容易描述与检验。

    https://segmentfault.com/a/1190000003888544

    理解函数式编程的关键,就是理解范畴论。它是一门很复杂的数学,认为世界上所有的概念体系,都可以抽象成一个个的"范畴"(category)。

    1.1 范畴的概念

    什么是范畴呢?

    维基百科的一句话定义如下。

    "范畴就是使用箭头连接的物体。"(In mathematics, a category is an algebraic structure that comprises "objects" that are linked by "arrows". )

    也就是说,彼此之间存在某种关系的概念、事物、对象等等,都构成"范畴"。随便什么东西,只要能找出它们之间的关系,就能定义一个"范畴"。

    bg2017022210.jpg

    上图中,各个点与它们之间的箭头,就构成一个范畴。

    箭头表示范畴成员之间的关系,正式的名称叫做"态射"(morphism)。范畴论认为,同一个范畴的所有成员,就是不同状态的"变形"(transformation)。通过"态射",一个成员可以变形成另一个成员。

    1.2 数学模型

    既然"范畴"是满足某种变形关系的所有对象,就可以总结出它的数学模型。

    • 所有成员是一个集合
    • 变形关系是函数

    也就是说,范畴论是集合论更上层的抽象,简单的理解就是"集合 + 函数"。

    理论上通过函数,就可以从范畴的一个成员,算出其他所有成员。

    1.3 范畴与容器

    我们可以把"范畴"想象成是一个容器,里面包含两样东西。

    • 值(value)
    • 值的变形关系,也就是函数。

    下面我们使用代码,定义一个简单的范畴。

    class Category {

      constructor(val) { 

        this.val = val; 

      }

      addOne(x) {

        return x + 1;

      }

    }

    上面代码中,Category是一个类,也是一个容器,里面包含一个值(this.val)和一种变形关系(addOne)。你可能已经看出来了,这里的范畴,就是所有彼此之间相差1的数字。

    注意,本文后面的部分,凡是提到"容器"的地方,全部都是指"范畴"。

    1.4 范畴论与函数式编程的关系

    范畴论使用函数,表达范畴之间的关系。

    伴随着范畴论的发展,就发展出一整套函数的运算方法。这套方法起初只用于数学运算,后来有人将它在计算机上实现了,就变成了今天的"函数式编程"。

    本质上,函数式编程只是范畴论的运算方法,跟数理逻辑、微积分、行列式是同一类东西,都是数学方法,只是碰巧它能用来写程序。

    所以,你明白了吗,为什么函数式编程要求函数必须是纯的,不能有副作用?因为它是一种数学运算,原始目的就是求值,不做其他事情,否则就无法满足函数运算法则了。

    总之,在函数式编程中,函数就是一个管道(pipe)。这头进去一个值,那头就会出来一个新的值,没有其他作用。

    https://www.cnblogs.com/feng9exe/p/8295402.html

  • 相关阅读:
    Unity3D 学习笔记一
    Java 常用类 -Math
    Java 常用类 -String VS StringBuffer
    Java 日期类 Calendar SimpleDateFormat
    Java 日期类 Calendar
    Java异常处理-自定义异常
    Java异常处理-Exception 和 RuntimeException 区别
    Java异常处理-throws和throw关键字
    Java异常处理-捕获和处理异常
    Java异常处理-异常的概念
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10876738.html
Copyright © 2011-2022 走看看