coreBugZJ

此 blog 已弃。

scheme中文编程 (转)

    受javaeye上的《Ruby中文编程》启发,帖子中有人提到如果 if 这样的关键字都可以定义成中文,那就是真正的中文编程。那时我就想到,这个其实要在scheme中实现是多么简单,将sicp书中的解释器稍微修改下就可以了,只要修改解析的部分即可。解释器的完整代码放后面,我们先看看有趣的例子:


1(定义 你 '男)
2(当 ((是 你 '男) (打印 '男人是泥土做的))
3    ((是 你 '女) (打印 '女人是水做的))
4    (否则
5         (打印 '妖怪啊)))
6

    其实呢,“定义”等价于define,“当”等价于cond,“打印”等价于display,说穿了不值一提,只是有趣罢了。不过设想在某些效率不是攸关的场景嵌入这么一个scheme解释器来定义DSL给业务人员使用,似乎也是不错的主意。当然这里还是scheme的前缀表达式,再修改下就可以像自然语言那样流畅,只不过括号还是少不了呀。

    再看几个例子:



 1(使得 ((a 3)
 2       (b 2))
 3       (+ a b))
 4
 5(定义 成绩 90)
 6(如果 (> 成绩 80)
 7      (打印 '良好)
 8      (打印 '要打PP了))
 9((函数(x) (* x x)) 3)  => 9
10
11(定义 (平方 x) (* x x))
12(平方 3)               =>9
13


    “使得”就是let,如果就是if,函数就是lambda。这不是中文编程吗?也许可以考虑申请国家专项资金来扶持:D

    完整的解释器代码,在drscheme选择R5RS标准下测试通过(代码折叠,请展开):


解释器源码

posted on 2012-03-17 13:30 coreBugZJ 阅读(1777) 评论(1)  编辑 收藏 引用 所属分类: 技术视野娱乐ProgrammingLanguageLisp

Feedback

# re: scheme中文编程 (转) 2012-03-17 15:57 KPSN

支持国际化标识符的语言/编译器都可以这样搞吧..  回复  更多评论   



只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理