一切皆list-对计算本质的思考(提纲)

比对象更抽象的是函数 比函数更抽象的是list

在数据结构课程中我们学习了 list等价于树 或者 广义表 而图可以转化为树处理 所以list可以表示任何数据机构 简单的说就是一切皆为list

因此有一门语言叫Lisp, clojure是其在jvm上的方言版本.

我们无法把clojure简单归为面向对象或函数式语言.在clojure中,

map是匿名对象 lambda是匿名函数

而我们在面向对象编程中所说的类其实是函数, 如果看javascript 这一点很明显, es6增加了class, 但仍然只是函数的语法糖. 而对象是有名称的map 

鉴于传统面向对象模式导致的过度复杂性 现代语言都在反思简化这一设计 如go就是使用了改良的struct 避免了复杂的类层级系统

用lisp的写法

(类名/函数名 域/局部变量)

对象最好只包含值 方法都在接口中 js是在原型中

而数据总可以表示为递归的list

(head tail)

从计算机的基础结构来看,任何计算都可以表示为list

(cpu memory)

汇编(机器)语言版本是

(指令 操作数)

(地址 值)

(根节点 子节点/森林)

(monad 函数list)

(进程 内存地址空间)

(硬件 软件)

(函数 数据)

而这背后的思想可以追溯到历史更为久远的lambda演算

(lambda 参数) 

也可以叫做调用 或 规约

每个list都是lambda 可以规约到最简形式

规约 调用 之后 产生新的list

就像一个小计算机

数据放入内存 cpu处理后产生新的计算机 

尽管从技术实现的角度看 很多操作是在原地更新 但是时间改变了 旧的状态成为了回不去的历史 实际是产生了新的状态

所谓大道至简 世界的本质就是 同一 与 和谐

你可能感兴趣的:(一切皆list-对计算本质的思考(提纲))