Rickey 裘 一无所知

文学编程

2017-03-24
Kai Qiu

学习知识要善于思考,思考,再思考。 —— 爱因斯坦

大学对我的最大影响是图书馆,正是在图书馆里的时间中,认识了博弈论,认识了王阳明,认识了加缪,至今思考很多事情时脑海中都会闪现出曾经的记忆。譬如之前不经意间触及的文学编程,现在感觉似乎有那么一点味道了。

一、起因

事情的起因是这样的,因为我在思考如何自动生成C语言代码,当然实现了C语言之后,相信其他语言也是可以做到的。昨天宏化了一些C语法。然后今天静下来考虑自动生成代码是怎么一回事情。

首先代码是什么?代码是一系列逻辑过程的具体实现。所以当我们说自动生成代码的时候其实是在说怎样把逻辑自动转换成具体的代码,对,就是。

逻辑->代码

再细细分析,这里包含了什么意思呢?逻辑本身是个笼统的概念,所以第一层意思就是如何表达逻辑?然后是逻辑表达方式到代码的转换,接着是如何组织代码体现逻辑,即代码的结构。所以其实是以下三个问题:

  • 逻辑的表示
  • 逻辑表示转换成代码
  • 代码的组织结构问题

二、问题分析

2.1 逻辑表示

写文章也是逻辑的表示,如果用这个做类比的话,其实文学即编程,编程即文学,综合起来就是文学编程。文章怎么表达逻辑,如果是用markdown做类比呢?

2.2 markdown到代码逻辑

一种类比可以是这样的

一级标题 eq. 工程 二级标题 eq. 模块 三级标题 eq. 函数

2.3 C代码的特点

上面的等价关系揭示了从宏观层次上考虑的代码结构,但是很多细节诸如全局变量,函数调用,参数传递(特别是指针)又如何和文章语法对应呢?

这些语言的细节问题其实都是一类问题:函数或者模块间通信的问题。因为模块或者函数间并不都是完全独立的。

2.4 细节整合

文章标题的层次关系揭示了代码的层级关系,同样的全局变量可以体现在某一个层级标题下的内容中。函数调用是小节和小节间的引用

定理:1.如果两个函数A和B,只存在A调用B的情况,那么必定可以通过标题区分A和B,A传递给B的内容是A对应标题下内容的一部分。2.如果存在相互调用的情况,即A调用B,而B也可能调用A,特例是递归函数,那么怎么考虑递归的情况呢?

最关键的问题是:函数体的具体内容怎么和文章内容对应?


上一篇 谈谈工作

下一篇 新的开始

评论