Computer Science 3675
Summer 2003
Solutions to practice questions for quiz 3

  1. What is the purpose of the static link in a frame in the run-time stack?

    The static link points to the activation of the creator of the current function.  It is used to find nonlocal bindings.

  2. What is the purpose of the dynamic link in a frame in the run-time stack?

    The dynamic link points to the activation immediately beneath this activation in the stack.  It is used to restore the stack frame pointers when the current function returns.

  3. What information is stored in a function closure?

    A function closure holds an indication of how to run a function (such as a pointer to the instructions that perform the function) plus a pointer to an activation or environment where the function gets its nonlocal bindings.

  4. In C, you are not allowed to write a function inside another function. But C does allow you to treat a function as a value. Does C need to use function closures?

    No. Since a function cannot be created inside another function, it has no creator, and does not need to get nonlocal bindings from a creator. An implementation of C does not need to store static links in the run-time stack.

  5. What is the value of Scheme expression (car (cdr (cons 'horse (cons 'zebra ()))))?

    zebra. It takes the second member of list (horse zebra).

  6. Write a Scheme function called prefix so that (prefix x y) returns true if list x is a prefix of list y. Be careful to use Scheme syntax correctly.

       (define (prefix x y) 
          (cond
             ((null? x) #t)
             ((null? y) #f)
             ((equal? (car x) (car y)) (prefix (cdr x) (cdr y)))
             (else #f)
          )
        )
      

  7. Explain the purpose of a dereference operation in the semantics of an imperative language.

    A dereference operation fetches the content of a memory cell from the current state of the computer.

  8. How does a denotational semantics differ from an operational semantics?

    The big difference is that a denotational semantics only tells you what the final answer is, where an operational semantics tells you about all of the steps that are made during the course of computation. A denotational semantics hides details that are visible in an operational semantics.

  9. Are backtracking and exception handling the same thing? For example, can you use the exception handling mechanism of Java to do backtracking?

    No, they are not the same, and exception handling cannot be used as a substitute for backtracking. A backtracking control frame remains active even after the function that created it has returned. An exception-handling control frame is removed when the context that created the frame is exited.

  10. What is one important motivation for including exception handling in a programming language?

    Some acceptable answers include the following.

    1. Exception handling makes it possible to move error handling code out of the flow of the main program logic.
    2. Exception handling makes recovery from errors easier, thus making programmers more likely to put in the effort to do it.
    3. Exception handling makes it possible to recover from errors in parts of the program that do not perform any error checking, and might be written in an unreliable way.