前文它山之石-日本推广编程中使用日语命名的渊源之后, 唤起了以前的一个想法:

将尽可能多的教科书知识(从小学开始)用程序+数据整理表达, 比如梯形定义,面积, 主谓宾语法, 电流公式, 煤矿富集的省份, 19xx年发生的历史事件等等. 感觉与前文的学科结合手段有点接近, 范围也许更广.

感觉这样的项目做大了就会接近wolfram知识库, 优势是开源, 中文化和更侧重中国相关的数据. 下面从数学和历史两个方向做了非常初步的尝试.

数学

尝试从人教版小学数学一年级上册开始, 但也许从更高年级开始更有可行性(更容易程序化).

"准备课"中的认知部分, 如认识上下左右前后, 算法识别不现实. 比多少的部分, 在没有加减能力的前提下, 通过将两组物品进行1:1的摆放, 定义了"同样多", "A比B多/少"的概念. 因此也模拟此过程, 避免使用加减法和数字大小比较, python3实现如下:

from enum import Enumclass 比较结果(Enum):多 = "多"少 = "少"同样 = "同样"def 比较(组1, 组2):for 序号 in range(10):if 组1:if not 组2:return 比较结果.多else:组1.pop(0)组2.pop(0)else:if 组2:return 比较结果.少else:return 比较结果.同样print(比较([1,2], [1,2,3]))
print(比较([1,2,3], [1,2]))
print(比较([1,2,3], [1,2,3]))

历史

先用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部分.

// 来源: 中国少儿百科全书-历史大观: 河姆渡文化-郑和下西洋var 朝代 = Object.freeze({新石器: "新石器时代",东周: "东周",春秋: "春秋时期",战国: "战国时期",秦: "秦朝",西汉: "西汉",东汉: "东汉",三国: "三国时期",隋: "隋朝",唐: "唐朝",元: "元朝",明: "明朝"
});var 社会类型 = Object.freeze({氏族社会: "氏族社会",母系社会: "母系社会"
});// TODO: 添加地点关系, 如国-地区-省-市-镇, 以及行政区划改变(村->镇等)
var 地点 = Object.freeze({浙江: "浙江省",余姚: "余姚市",河姆渡: "河姆渡文化",长江下游: "长江下游地区",黄河中游: "黄河中游地区",陕西: "陕西省",西安: "西安市",半坡: "半坡遗址",长安: "长安",洛阳: "洛阳",齐: "齐国",晋: "晋国",宋: "宋国",秦: "秦国",楚: "楚国",吴_春秋: "吴国",越: "越国",燕: "燕国",韩: "韩国",赵: "赵国",魏_战国: "魏国",鲁: "鲁国",匈奴: "匈奴",大月氏: "大月氏",西域: "西域",官渡: "官渡",赤壁: "赤壁",魏_三国: "魏国",蜀国: "蜀国",吴_三国: "吴国",吐蕃: "西藏",蒙古: "蒙古国",中亚: "中亚",东欧: "东欧",西洋: "东南亚和印度洋沿海"
});// TODO: 更多人物信息, 如原名, 性别, 小名等等
var 人物 = Object.freeze({周平王: "周平王",齐桓公: "齐桓公",晋文公: "晋文公",宋襄公: "宋襄公",秦穆公: "秦穆公",楚庄王: "楚庄王",吴王: "阖闾",越王: "勾践",孔子: "孔子",老子: "老子",墨子: "墨子",孟子: "孟子",秦王: "嬴政",汉景帝: "汉景帝",汉武帝: "刘彻",卫青: "卫青",霍去病: "霍去病",张骞: "张骞",袁绍: "袁绍",袁术: "袁术",曹操: "曹操",孙坚: "孙坚",刘备: "刘备",孙权: "孙权",曹丕: "曹丕",汉献帝: "汉献帝",唐太宗: "李世民",李靖: "李靖",尉迟恭: "尉迟恭",李建成: "李建成",魏征: "魏征",文成公主: "文成公主",松赞干布: "松赞干布",武则天: "武则天",唐高宗: "唐高宗",成吉思汗: "铁木真",忽必烈: "忽必烈",郑和: "马和",朱棣: "朱棣"
});var 年号 = Object.freeze({贞观: "贞观"
});var 路线 = Object.freeze({丝绸之路: "丝绸之路"
});var 群体 = Object.freeze({儒家: "儒家",道家: "道家",墨家: "墨家"
})var 行为 = Object.freeze({栽种: "栽种",制作: "制作",结婚: "结婚",求教: "求教",消灭: "消灭",出使: "出使",出击: "出击",击败: "击败",效力: "效力",称帝: "称帝"
});var 植物 = Object.freeze({水稻: "水稻"
});var 物件 = Object.freeze({陶器: "陶器"
});var 国家所属时期 = Object.freeze({[朝代.春秋]: [地点.齐, 地点.晋, 地点.宋, 地点.秦, 地点.楚, 地点.吴_春秋, 地点.越, 地点.鲁],[朝代.战国]: [地点.齐, 地点.楚, 地点.燕, 地点.秦, 地点.韩, 地点.赵, 地点.魏_战国],[朝代.三国]: [地点.魏_三国, 地点.吴_三国, 地点.蜀国]
});// 数字为公元纪年, 如-5000即公元前5000年, 221即公元后221年
// TODO: 很多年份如秦代-200需更正
var 时间跨度 = Object.freeze({[地点.河姆渡]: {开始: -6000, 结束: -5000},[地点.半坡]: {开始: -4400, 结束: -4300},[朝代.东周]: {开始: -770, 结束: -221},[朝代.秦]: {开始: -221, 结束: -200},[朝代.西汉]: {开始: -200, 结束: 0},[朝代.东汉]: {开始: 0, 结束: 229},[年号.贞观]: {开始: 626, 结束: 650}
});// TODO: 此表仅在人物无具体生卒年月时有用
var 所属时期 = Object.freeze({[地点.半坡]: 朝代.新石器,[地点.河姆渡]: 朝代.新石器,[人物.孔子]: 朝代.春秋,[人物.老子]: 朝代.春秋,[人物.卫青]: 朝代.西汉,[人物.霍去病]: 朝代.西汉
});var 所属地点 = Object.freeze({[人物.孔子]: 地点.鲁,
});var 人物所属群体 = Object.freeze({[人物.孔子]: 群体.儒家,[人物.孟子]: 群体.儒家,[人物.老子]: 群体.道家,[人物.墨子]: 群体.墨家
});var 属性 = Object.freeze({[地点.河姆渡]: 社会类型.氏族社会,[地点.半坡]: 社会类型.母系社会
});// 行为方向为: 前者对后者
// TODO: 加入事件发生时间, 地点
var 事件 = Object.freeze({[行为.结婚]: [(人物.文成公主, 人物.松赞干布), (人物.武则天, 人物.唐高宗)],[行为.栽种]: [(地点.河姆渡, 植物.水稻)],[行为.制作]: [(地点.半坡, 物件.陶器)],[行为.求教]: [(人物.孔子, 人物.老子)],[行为.消灭]: [(地点.秦, 地点.韩), (地点.秦, 地点.赵), (地点.秦, 地点.魏_战国)],[行为.出使]: [(人物.张骞, 地点.西域), (人物.郑和, 地点.西洋)],[行为.出击]: [(人物.卫青, 地点.匈奴), (人物.霍去病, 地点.匈奴)],[行为.击败]: [(人物.曹操, 人物.袁绍)],[行为.效力]: [(人物.魏征, 人物.李建成), (人物.魏征, 人物.唐太宗), (人物.李靖, 人物.唐太宗), (人物.尉迟恭, 人物.唐太宗), (人物.郑和, 人物.朱棣)],[行为.称帝]: [(人物.曹丕, 地点.魏_三国, 220), (人物.刘备, 地点.蜀国, 221), (人物.孙权, 地点.吴_三国, 229)]
});var 名言 = Object.freeze({[人物.唐太宗]: ["民, 水也; 君, 舟也. 水能载舟, 亦能覆舟"]
});

之前问过的: 有没有公开的中国历史人物事件数据库? 其中并没有很多事件数据, sqlite数据库就有230MB. 考虑将数据范围限制在教材内, 以避免数据量过度膨胀.

源于讨论: 通过中文命名将少儿编程与核心学科结合起来 · Issue #97 · program-in-chinese/overview

相关问题: 有哪些开源的知识库(数据, 非软件)? - V2EX

转载于:https://www.cnblogs.com/program-in-chinese/p/10504063.html

2018-10-27 初步尝试将传统学科的内容程序/数据化相关推荐

  1. 初步尝试将传统学科的内容程序/数据化 2018-10-27

    前文它山之石-日本推广编程中使用日语命名的渊源之后, 唤起了以前的一个想法: 将尽可能多的教科书知识(从小学开始)用程序+数据整理表达, 比如梯形定义,面积, 主谓宾语法, 电流公式, 煤矿富集的省份 ...

  2. ssl提高组周六备考赛【2018.10.27】

    前言 高三dalao试图混入其中 成绩 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 111 2017myself2017my ...

  3. 2018.10.27 bzoj3209: 花神的数论题(数位dp)

    传送门 数位dpdpdp经典题. 题面已经暗示了我们按照二进制位来数位dpdpdp. 直接dpdpdp多少个数有111个111,222个111,333个111-, 然后快速幂算就行了. 于是我们枚举前 ...

  4. 【2018/10/27测试T1】洛阳怀

    [题目] 传送门 [分析] 其实这道题似乎没有想象中的那么难 先说一下如何求 f(x)f(x)f(x) 吧,对 xxx 分解质因数,在这些质因数中,f(x)f(x)f(x) 就是好质数个数减去坏质数个 ...

  5. 10天精读掌握:计算机组成与设计(COAD:Patterson and Hennessy) (第4天 2018/10.29)

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第4天 2018/10.29 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...

  6. Daily Scrum 10.27

    今天毛宇已经完成了游戏每个模块的整体设计,并且大家聚在一起,对这些模块进行了具体的讨论和分析,包括模块的具体功能.接口.模块儿间的交互,以及注释的规范等等.大家看到彼此都能够按时完成任务,并且同步地进 ...

  7. 腾讯SkillNet|NLU任务全能网络,对Pathways架构的初步尝试

    卷友们好,我是rumor. 21年10月的时候,谷歌大佬Jeff Dean提出了下一代AI架构的Pathways概念[1],旨在通过一个大模型完成各种不同的任务.对于较早关注AI领域的同行们来说,这其 ...

  8. c语言程序设计实验指导交大答案,C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc...

    C语言程序设计实验指导_上交大_课前练习-改错-完善程序-课后练习参考答案--2018.10修改.doc 实验一 Visual C集成环境实验内容(一)程序改错1.(1)无法运行(2)将第二个C程序重 ...

  9. 10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31

    10天精读掌握:计算机组成与设计COAD:Patterson and Hennessy 第6天 2018/10.31 1. 第4次周计划概览 2. 今日学习成果 3. 今日时间表 4. 今日反思 5. ...

最新文章

  1. 2017年深度学习必读31篇论文(附下载地址)
  2. linux bash函数里面调用命令行,Linux-在gnome-terminal -x中运行bash函数
  3. O(n* (logn)^2 )的Shell排序——转自Matrix67的博客
  4. 迈足狂奔!铁塔公司:目前北京已建好4400多座大型5G基站
  5. Android Unable to execute dex: java.nio.BufferOverflowException
  6. NOSQL数据库习题
  7. python报错Statements must be separated by newlines or semicolons解决方法
  8. 高通msm8909/msm8953 Linux支持双卡双待
  9. 笔记本电脑计计算机硬盘分区,笔记本电脑如何分区,小编教你笔记本电脑如何分区...
  10. 简单的交叉熵损失函数,你真的懂了吗?
  11. 软件项目管理 第六章 成本计划
  12. 冰河的大学生活,两个好基友:二神和波妞,哈哈,挺有意思的
  13. 软件质量测试雨课堂习题
  14. idea激活码2020最新教程——教育邮箱和开源项目可以免费申请IDEA使用权
  15. The Staircases
  16. Java8新特性函数式编程
  17. EDA学习环境的搭建
  18. 移动硬盘插在电脑上提示需要将其格式化,我该怎么办?
  19. 【博学谷学习记录】超强总结,用心分享|大数据之Hive
  20. 02 windows网络安全

热门文章

  1. 批量查询EMS快递单号的方法,求分享
  2. stm32h745i 双核工作原理解析
  3. VMware Workstation 15 语言修改
  4. asp.net 2.0中,新增加了validationgroup属性
  5. 阻容感基础09:电感器原理(2)-电感器基本特性
  6. 人事管理信息系统mysql代码_人事管理系统——数据库操作类
  7. CUM-PIE dataset
  8. Error connecting to master ‘slave@192.168.200.128:3307‘ - retry-time: 30 retries: 1
  9. Android Uri.parse的详细资料
  10. 海洋工作室——网站建设专家:送两个高级可信的IT方面的电子书下载地址给大家【关键是完全免费,无需额外Q币或积分什么的】...