将中文教科书知识(从小学开始)用程序+数据整理表达, 比如梯形定义,面积, 主谓宾语法, 电流公式, 煤矿富集的省份, 19xx年发生的历史事件等等. 感觉与前文的学科结合手段有点接近, 范围也许更广.
感觉这样的项目做大了就会接近wolfram知识库, 优势是开源, 中文化和更侧重中国相关的数据. 下面从数学和历史两个方向做了非常初步的尝试.
数学
尝试从人教版小学数学一年级上册开始, 但也许从更高年级开始更有可行性(更容易程序化).
"准备课"中的认知部分, 如认识上下左右前后, 算法识别不现实. 比多少的部分, 在没有加减能力的前提下, 通过将两组物品进行1:1的摆放, 定义了"同样多", "A比B多/少"的概念. 因此也模拟此过程, 避免使用加减法和数字大小比较, python3实现如下:
历史
先用Python3, 后用JavaScript (因为想和“通过浏览器插件实现一个计算/编程工具” · Issue #61 · program-in-chinese/overview结合)编写历史数据, 感觉有几个优势:
数据是文本格式, 易于合作编辑
易于扩展和重构, 相比数据库, 可以更方便地增减/修改数据之间的关系
编辑时可以借助IDE的自动补全, 语法错误等功能, 减少笔误
易于编写自动测试以保证一些基本检验规则, 比如朝代没有重合部分, 先辈出生日期肯定早于后辈, 等等.
易于直接使用数据进行分析:
比如这样:Array.prototype.diff = function(a) { return this.filter(function(i) {return a.indexOf(i) < 0;});};消失国家 = 国家所属时期[朝代.春秋].diff(国家所属时期[朝代.战国])console.log("春秋消失的国家: " + JSON.stringify(消失国家))
输出:
春秋消失的国家: ["晋国","宋国","吴国","越国","鲁国"]
下面是源码(由于过长,仅头尾节选), 仅作原型演示之用, 如果正式开始项目会采用更翔实的史实参考来源(如教材). 数据结构设计等等很不成熟, 请多指摘, 尤其是TODO部分.
注:文中代码可分别在 Python3 和 JavaScript 运行,因为它们早就支持中文命名标识符(变量、方法、类名等等)。
用中文编程