函数递归,SAS中会发生什么?

时间:2012-01-01 14:56:01

标签: declarative oz

我有这种情况:递归过程(或函数)被称为

{DoSomething Data C}

和C是应该存储最终结果的变量,函数原型是

proc {DoSomething Data N}
     %.. 
     %.. 
     {DoSomething Data M}
     N = 1 + M
end

和N是应该存储最终结果的变量,但是在过程的本地范围内。

现在告诉我,首先,当调用该程序时,SAS是:

注意C和N之间的等价集(目前都是未绑定的)

然后在所有递归完成后,SAS就是

注意C和N都绑定到值(6)

退出程序后,SAS留下了

因为你破坏了N变量。那没关系。

我的问题是:在程序递归过程中会发生什么? C变量是否链接到部分值结构1 + M?然后下一次M链接到1 + M2?

1 个答案:

答案 0 :(得分:1)

不,只要我们谈论简单的整数算术,Oz就没有部分结构。

本声明:

N = 1 + M

将阻塞,直到M完全确定,即绑定为整数。

要真正理解发生了什么,我必须看到完整的代码。 但我假设有一个返回具体值的基本情况。一旦达到基本案例,递归将“冒泡”,将1添加到内部调用的结果中。

换句话说,C的绑定只会在最外层过程调用结束时更改,其中M5C因此绑定到{ {1}}。