【问题标题】:Function recursion, what happens in the SAS?函数递归,在 SAS 中发生了什么?
【发布时间】:2012-01-01 14:56:01
【问题描述】:

我有这样的场景:递归过程(或函数)被称为

{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 ?

【问题讨论】:

    标签: declarative oz


    【解决方案1】:

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

    此声明:

    N = 1 + M
    

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

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

    换句话说,C 的绑定只会在最外面的过程调用结束时发生变化,其中M5,因此C 绑定到6

    【讨论】:

    • 我知道!!有人告诉我,C 的环境绑定在每次迭代时都会改变,指向新的部分 N.. 但这对我来说听起来很愚蠢
    猜你喜欢
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2020-08-22
    • 2020-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多