| | |
|
组别 | 士兵 |
级别 | 忠义校尉 |
功绩 | 2 |
帖子 | 243 |
编号 | 51305 |
注册 | 2005-10-17 |
| |
| | |
|
|
|
我玩过Linux下的RVM_FORTH, 而且还用C在Linux写了个模仿Forth的虚拟机(用了2个月),对于一个团队写个FORTH应该不难.
对于所谓的“汉语编程”我还真没去看过, 以我的经验如果用FORTH一定可以实现所谓的汉语编程,但是那篇文章大部分是BullShit. 如果他们真的是剽窃Forth, 那真是太恶心了, 我看都不会去看.
在我看来FORTH是一个很好玩的Toy Language, 当然现在也有相当一部分研究人员使用它作为"正式方法学"的实现语言, 因为它比C更贴近逻辑学和计算机数学,而且它简单而优雅.
Forth的原理如下(我自己总结的,有兴趣的朋友自己可以Wiki一下):
1. 首先构建一个基本的字典,还有一个公用堆栈.
2. 一开始字典里的保存了由开发者提供的基本"单词"(其实就是函数,控制,和循环的关键字)
3. 用户可以用已有的"单词" 解释和定义一个新的 "单词", 参数和返回结果由公用堆栈传递
4. Forth可以本看成一本不断扩充的字典,Forth通常被实现为命令行的虚拟机,用以执行所定义的"单词",所以用户所定义的"单词"通常也给以被看作脚本,因为通常他们 是不需要被编译的.
5. FORTH通常被表述为后缀语言. 一个简单的例子:
3 4 = <enter>
数字 3 和 4 将会被推上公用堆栈, 然后单词 " = " 将提取公用堆栈最顶端的两个元素(3和4),然后比较, 返回一个布尔值在公用堆栈上(0或1)
用户单词定义的方法:
: <用户单词名称> <解释和定义> ; <enter>
用户单词定义的例子:
------------------------------------------------------------------------------------------------------------------------
: FACTR ( n -- n! recursive defn of factorial )
DUP 0 =
IF DROP 1
ELSE DUP 1 - FACTR
THEN ;
-------------------------------------------------------------------------------------------------------------------------
例子解释 1:
单词 FACTR 使用归递法求factorial数, 这个单词提取一个公共堆栈的顶端元素作为输入参数,返回一个结果在公共堆栈的顶端.(这个函数有够短吧)
例子解释 2:
DUP 复制公共堆栈的顶端元素,提取一个顶端元素,返回原顶端元素和一个复制品.
= 比较公共堆栈的两个顶端元素,返回1或0在公共堆栈的顶端
- 公共堆栈的两个顶端元素相减,返回结果在公共堆栈的顶端
DROP 扔掉公共堆栈的一个顶端元素
IF ELSE THEN. 提取顶端元素如果它等于1, 执行 IF 和 ELSE 之间的"单词", 不等于1 执行 ELSE 和 THEN 之间的"单词".
所以,用户完全可以定义一系列的”单词“不但可以执行,而且还有很高的可读性。
比如命令: COUNT APPLES TELL MANAGER
又比如定义"WORK" : WORK COUNT APPLES TELL MANAGER ; <enter>
另: 看了楼主的另一贴,我要说写一个通过虚拟机画图其实并不难. 我现在手上还有一个我自己写的L-System 2D字符串画图工具(命令行虚拟机,通过OpenGL实现画图)
[ 本帖最后由 lazyman 于 2007-10-16 12:52 编辑 ]
|
|
|
|