layout: post comments: true title: "通用型的中文编程语言探讨之一: 高考" description: 由高考开设编程科目说开去, 设想一种通用型的中文编程语言. As university entrace exam in China starts to include programming, here we discuss about a general-purpose programming language in Chinese. date: 2018-01-05 00:00:00 -0700
在可预见的未来, 高考仍是最重要的也最有社会影响力的人才选拔机制. 很久没有关注, 最近得知高考自选科目中开始增加了编程一项(见如何评价2017浙江高考七选三科目中包含技术?). 虽然个人对编程是否应该进入高考仍有保留看法, 但至少全民(都应该可以)编程这一趋势已经很明显了. 这应该是中文编程兴起的另一个契机(前文中文编程兴起的必然性讨论了一些更技术性的原因).
看了2017年浙江的高考卷, 感觉算法/体系/基础知识比较少, 比较偏技术. 相信以后会逐渐调整. 毕竟技术更新快, 而前者更经得起时间考验也更有含金量. 个人觉得算法在短期内仍需要一个具体的编程语言作为载体, 毕竟教学实践中不可能作纯粹的纸上算法. 那么, 一个适合算法设计和实践的中文编程语言, 假如能在高考卷中使用, 相信会是一个中文编程的里程碑.
本文试图列出一些(当然绝不是全部)这一假想中的语言/开发环境的功能特性和示例, 希望抛砖引玉. 其中, 对每项功能的必需性按照一到三排列, 一最高.
(将在program-in-chinese/overview持续改进和更新)
[一] 相对英文编程语言的直译, 语法应更接近中文自然语言语法, 并且包含的特殊符号尽量使用数学常用符号. 比如下面一种设想的语言(欢迎拍砖!), 与Python的二分查找对比.
选择{}作为函数体边界, 因为数学定义中常用左大括号(如下). 暂时没有想到比添上右大括号更合适的设计. 至于{}是否允许省略, 倾向于不允许, 以规避歧义. 另一种可能是类似日语编程语言"抚子" - 第三版特色初探, 不用{}而是使用关键词作为结束标志("直到这里"之类)
缩进量不改变语义, 仅为改进可读可选: 为避免意外的缩进错误导致的语义错误
定义 二分查找(数组, 目标) {
左索引 = 0
右索引 = 取长度(数组) - 1
位置 = -1
当 左索引 ≤ 右索引 且 位置 为 -1 {
中索引 = 向下取整((左索引 + 右索引) / 2)
如果 数组(中索引) 为 目标 {
位置 = 中索引
} 否则 {
如果 数组(中索引) > 目标 {
右索引 = 中索引 - 1
} 否则 {
左索引 = 中索引 + 1
}
}
}
返回 位置
}
Python:
def binarySearch(array, key):
left = 0
right = len(array) - 1
res = -1
while left <= right and res == -1:
mid = (left + right) // 2
if array[mid] == key:
res = mid
else:
if array[mid] > key:
right = mid - 1
else:
left = mid + 1
return res
一些相关讨论和参考:
讨论: 适合中文用户的编程语言和IDE, 侧重于现有语言/IDE不具备的特性 · Issue #11 · program-in-chinese/overview