道cpu模拟器、道指令编译程序已经初步完成,但还有很多工作要做。在更深入地开发之前,首先编写一道计算机递归程序,在此基础上加以解释,让更多的人了解道cpu、道指令如何工作,并提出有用的建议。
hhhyyyy
{
main()()
{
[dgdfg]->f(10)(ttttt);
[ttttt]->[ttttt,显示结果,结束];
}
f(n)(result)
{
[n=1]-><1>;
[n]<n=1>->$oldn=n;
[n]<n=1>->f(n-1)(fresult);
[fresult]-><oldn*fresult>;
[fresult]->[~oldn,~this,~oldthis];
}
}
运行结果载图:
以下讲解上述程序如何运行:
// 道指令程序包含许多函数,这些函数定义在一个较大的程序空间。
//首先程序空间hhhyyyy
hhhyyyy
{
/*像c语言一样,声明一个主函数,便于用户调用,如果是私用的程序,主函数便可以随便令名。*/
main()()
{
/* dgdfg符号是函数开始符号,这个符号必须由函数输入参数传入,或在主函数中由用户直接传入*/
[dgdfg]->f(10)(ttttt);
/*[dgdfg]表示dgdfg符号存在时,便激发“->”后的生成指令,f函数就可以执行调用了,调用后dgdfg符号就丢弃了。当f(n)( result)函数调用完成后,result 的值赋给ttttt ,ttttt可以使用了*/
[ttttt]->[ttttt,显示结果,结束];
/*[ttttt,显示结果,结束]表示同时生成三个符号,其中已有的ttttt符号保留原值,其他的符号为空值 */
}
f(n)(result)
{
[n=1]-><1>;
//表示当n=1时,返回1给result。”->”后的”<>”符号是返回标志
[n]<n=1>->$oldn=n;
/* 表示当n!=1时, 把n符号值赋给oldn符号,$表示保留oldn符号在数据栈中直到函数完全结束。*/
[n]<n=1>->f(n-1)(fresult);
/* 表示当n!=1时, 调用f函数。*/
[fresult]-><oldn*fresult>;//函数返回oldn*fresult值。
[fresult]->[~oldn,~this,~oldthis];
/*[~oldn,~this,~oldthis]表示从数据栈中丢弃三个符号,该函数从调用栈中清除。*/
}
}
从上述道指令的编程中可以看出,目前,道指令语言仅有几个标号:
道指令 :[…]…<…>…->[…]
符号存储指示:$、~
函数调用:prog.functcall(….)(….)
函数返回:[…]…<…>…-> <…….>;
道指令语言编程的关键在于,必须控制符号在数据栈中的存在,道指令根据符号在存在运行生成结果。理解符号的存在,也就理解道指令的本质。