网络书屋(Web Reading Room)

A blogging framework for hackers.

Haskell几个基本概念--学而无用--无以为用

  1. 模式匹配 = +起着一种模式匹配,=不要翻译成等于 最好翻译为如果匹配前面+ 则他的值为后面.–> 也起着一种类型的模式匹配。
  2. 分支 |在创建函数的时候 体现着一种分支的效果。 if-else 这其实是一种控制语句,不能说Haskell放掉了控制语句,而应该是循环语句。
  3. 一切都是函数。 根据monad的内置结构,函数可以组合生成类似于数学的组合函数(埋藏内部的lambda结构)

函数只是关系的表示,可以说它是过程、变换、运动(从泛函的角度解释)

本来函数式变成是不考虑空间的, 而面向对象则是引入不必要的空间问题,来挂上函数,最终都是为了实现函数变换或者函数过程,或者统称为运动。 假如宇宙存在根节点,越靠近根节点的肯定越抽象,我们现在是工作在底层的具象节点下。

面向对象属于分解,函数编程属于组合。有以为 利,通过面向对象我们将一分解为多个,数量多了,“有”,而函数编程则是将多个组合成一个,数量少了 ,“无”,无才能用,只有忽略事物内部的细节,我们才 能用它,否则陷入细节迷失方向。换句话说:数学分数考得好,不代表在实际中用数学用的好,牛 顿没有发明几何学,但是用了几何学,创造了微积分,用它们推导 出万有引力;爱因斯坦用了非几何学推导了相对论。

从有至无方为用,有乃分,无乃合,宇宙的起点源于无

学习是一种分解能力,使用是一种组合能力,这是两种不同的能力。

再看看老子道德经的一段:三十幅共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之 以为用。 这段话意思是:三十根棍子做成的圆轱辘,只有忽视圆轱辘内部这种结构,着眼于圆轱辘外部,才会发现它原来是可以做车的轮子这一用处,两个轱辘与车 架组合成一辆车。比如门窗,只有忽视其内部如何结构的构建,才会从外部想到用它在房间组合中。

树形结构抽象细节

我们之所以使用树形结构,用一个根节点代表其聚合群体,用组长代表所有组员,用名字代表人的全部,等等这些组合抽象的办法就是让我们大脑去除大量 对象内部的细节,用一个符号代替它们,这样我们才能基于这个树的根节点再组合成新的树形结构。

范畴理论-交际的互联网

范畴理论(Category)总是鼓励我们从对象内部细节中转移开来,在范畴理论中 一个对象是一个抽象模糊的实体,你所有需要知道的只是它如何和其他对象交互(关系),它是怎么使用箭头和其他对象连接的,这就是为什么互联网搜索引擎 Google Baidu等能够通过分析链入和链出的链接来排名网站一样。

无以为用—组合思想

归根到底,还是“无以为用”这个范畴的组合本质很多人都没有搞清楚。

  • 只有忘记对象的细节才能用好它。两个原因总结一下:
    • 首先,首先人脑短时记忆有限,如果大量对象内部细节占据大脑,而我们需要从对象外部组合它们, 这些细节是干扰。
    • 其次,范畴也认为组合对象只要将对象看成模糊实体,注重它们之间关系。
  • 忘记学习对象的细节才能用好它,无以为用,事物的制造者都不一定能用好它,除非事先有目标制造它。 因此,学并不能致用,数理化学得好不一定用得好,博士给老板打工,老板赚大头。因为他把你的学问用处发挥了。自己学自己用因为智力限制也不可能。
  • 中国教育的典型 在学生阶段,中国学生数理化很好,但是毕业后诺贝尔奖获得者几乎没有,世界自然科学领军人物很少,那些高考状元 学神都哪儿去了?学得好不 一定用得好,中国教育制度是以学习能力评价学生,各种考试充斥大量 知识细节,让学生耗费18年于这些可能以后无用的细节中,最终他们已经没有智力 空间来思考如何使用这些大量的知识细节了。中国教育制度存在严重的本质错 误。 面向对象的分解能力是强,但是组合能力很弱! 实际上从函数运算的角度,不存在单纯的“值”,1应该是=& gt;1,或者说,所谓的常量值也是函数,只是每次不管输入什么都输出同样的结果。这样世界就只有运算,值是没必>要的,更没有状态。但这是神的视角,而一 旦人开始思考时,由于不具备神的无限的能力,只能在每个瞬间试图去把握世界,就看到了值和状态以及状态呈现时的context/stage/>舞台。但人希 望能像神一样去理解世界,就只好从这每个瞬间呈现的一切中去寻找变与不变的东西,当他们历尽艰辛找到“不变”的“变换”时就迫不及待地将之命名为定律。

关于上述思想,计算机邀请Haskell带领领略(Haskell可以学习,但是需要投入很多时间,坚持…)

桌子 一张桌子为案例,分解思维的人看到后首先想到这张桌子由什么构成,长宽高和材质,这些都是桌子的内部细节;而组合思维的人看到后,环顾四周,看看其处于什么环境,如果放在教室中,他判断这是一张课桌,如果放在食堂,他判断这是一张饭桌。

1
从这个例子可以看出组合是从行为(运动、变化、时间)角度看待 世界的,“课桌”、“饭桌”中的“课”和“饭”在这里是动词,意为“上课用”、“吃饭用”的意思,“用”是动词,同一个桌子出现在不同的环境中发挥不同的 作用。而分解思维只研究空间,只研究桌子的空间结构是什么,甚至不研究为什么是四条腿,为什么每条腿长度相同,分解思维根本不考虑这些,不用考虑任何桌子 之外的世界,在分解思维中没有万有引力、没有地面的水平、没有书房和餐厅,只有空间,分解只考虑空间的组成结构。看来分解和组合是相互依存的,分解时研究 的是空间,组合时研究的是行为,把桌子放进餐厅的意义是期待使用它吃饭这样一种运动。

范畴英文是Category,也是++分类++的意思,打个比喻,Google能根据哪些网站引用你的网站这个外部信息进行PageRank评分,从而对你的网站权重进行排序,这个道理和我们评价一个人有些类似,看一个不认识的人怎么样,那就看看他交往的什么朋友,什么环境,近墨者黑,人以群分,物以类聚,这些都是从事物所在的分类类别中判断其价值,而不是从事物内部细节。(评判个人的价值标准跟不同的人在一起,意味着你的价值不一样.)

monad 隐藏lambda

Monad是一种结构,这种结构能够将一个值放入一个可计算的上下文中。因为Lambda是一个和上下文环境有关的表达式,所以,这里对Monad的上下文理解就比较容易。 monad是从范畴论引入, 范畴其实就是一个集合,只不过对这个集合有一些约束定义,如果 熟悉业务建模的人可能对这种思维方式不陌生,经常我们会对抽象的事物进行定义,数学上基本就是用集合概念,实际上从罗素悖论拯救了数学开始,数学离不开集合,对于一个国家社会,个人与社会也是不同的概念,社会是一个++集合++概念,从++集合角度++考虑问题和从个人元素角度考虑问题是两种截然不同的思路,如果你平时注 重这种区别,你可能会有两种人生观。祝你脑洞大开。

函数式替代sql?

函数的逻辑性与关系数据库的是一致的,而逻辑在不同语言之间是自然贯穿的,也就是说若果所有都用函数来表达的,可以使sql消失,那么由于sql引发的问题自然就消失。 数据库 = 一个集合,这就是面向集合,mongodb就是这样的思想