2012-01-01 65 views
0

我有这样的情形:一个递归过程(或函数)被称为像函数递归,SAS中会发生什么?

{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

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

此语句:

N = 1 + M 

将阻塞,直到M被完全确定,即结合到一个整数。

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

换句话说,的C结合将仅在最外的过程调用,其中M5因此C势必6的端部而改变。

+0

我知道了!有人告诉我,C的环境绑定会在每次迭代时都会改变,指向新的部分N ..但这听起来很愚蠢 – 2012-01-01 17:19:00