13

I'm not sure how to do this...

function f1()
{
    var x = 10;
    function f2(fx)
    {
        var x;
        x = 6;
        fx();
    };

    function f3()
    {
        print x;
    };

    f2(f3);
};

For each of the following two binding methods, what would the program print? A) Shallow Binding B) Deep Binding

Thanks for the help!

Ricky
  • 823
  • 2
  • 14
  • 31
  • 4
    see [here](http://stackoverflow.com/questions/1753186/dynamic-scoping-deep-binding-vs-shallow-binding). in a nutshell: deep binding prints `10` as the binding of `x` takes place when `f2` is called, shallow binding prints `6` as `x` is bound when `f3` (being a procedure parameter to `f2`) is called from `f2`. – collapsar Mar 23 '13 at 02:15

3 Answers3

24

Deep/shallow binding makes sense only when a procedure can be passed as an argument to a function.

  • Deep binding binds the environment at the time a procedure is passed as an argument.
  • Shallow binding binds the environment at the time a procedure is actually called.

Deep binding.

Here f3() gets the environment of f1() and prints the value of x as 10 which is local variable of f1().

Shallow binding.

f3() is called in f2() and hence gets the environment of f2() and prints the value of x as 6 which is local to f2()

1

• The environment of the call statement that enacts the passed subprogram (shallow binding)

• The environment of the definition of the passed subprogram (deep binding).

In some cases, the subprogram that declares a subprogram also passes that subprogram as a parameter. In those cases, deep binding and ad hoc binding are the same.

-1

Shallow binding : the environment of call statement that enacts the passed subprogram Deep binding : the environment of the definition of the passed subprogram Ad hoc binding : the environment of call statement that passed the subproblem as an actual parameter