# Activity Goals

The goals of this activity are:
1. To explain the programming language constructs of expressions
2. To explain the programming language constructs of conditionals
3. To explain the programming language constructs of functions
4. To explain the programming language constructs of exceptions
5. To relate complex data structures to their position in memory and pointer- or reference-based representation in memory

Feel free to visit these resources for supplemental background reading material.

# The Activity

## Model 1: Assignment Expressions

### Questions

1. In what contexts do you see x being used in this program? How about the equals sign?
2. Why is there a = in some instances but a == in others? What would happen if the x == 6 were replaced with x = 6? How does this compare to other languages?
3. Which x variable uses would be referred to as l-vals, and which as r-vals?

## Model 2: l-val and r-val Semantics

### Questions

1. In what contexts is heights an l-val, and in which is it an r-val?
2. What does the ampersand mean in this program?

## Model 3: Conditionals

### Questions

1. Rewrite this code using only GOTO statements for the body of the if and else clauses, like in BASIC.
2. Which structure do you prefer and why?

## Model 4: Iteration

### Questions

1. Re-write this loop with a traditional counter loop. How might this work using GOTO structures?

## Model 5: Functions and Evaluation Strategies

### Questions

1. In C, what would happen if ptr is NULL? Would this program fail?
2. From context, what do you think lazy evaluation means?
3. Would this outcome be different in an eager evaluation language?

## Model 6: Generator Functions

### Questions

1. What, in your own words, does a generator do?
2. What do you think are the advantages of using a generator as opposed to creating and returning a list?
3. In Python 2, create a list using range(N) for some large value of N. Use sys.getsizeof() to get the size of the list you create, and print it to the screen. Now, repeat this with the xrange(N) function. How do they compare, and how might you account for the difference?

## Model 7: Recursive Functions

### Questions

1. What do you think is meant by tail recursion?
2. Define a recursive approach to find the last item in a list in Scheme. Note that (if (null? (cdr l)) asks if the cdr of list l is null.
3. Is each call to factorial distinct? In other words, what is each value of n in each function call? Based on this, what do you think is the difference between pass-by-reference and pass-by-value in a function call?

## Model 8: Lazy and Eager Evaluation

### Questions

1. How many times is fibonacci(2) called if the initial call was to fibonacci(3)?
2. How many times does fibonacci(2) really need to be called? What could we do to help ensure that this happens?

## Model 9: Old Fashioned Exceptions

### Questions

1. What is the value of x if malloc fails?
2. What do you think perror does?
3. What is errno?
4. What would happen if a second syscall fails before checking the value of errno? Based on this, what can you say about the variable errno?
5. In what ways can the read syscall fail?
6. What would happen if you divided by 0 in C?

## Model 10: Explicit Exception Handling

### Questions

1. How might you use this structure to recover and proceed when an exception occurs?
2. What might you do if you encounter an exception from which you cannot recover?

## Model 11: Throwing Exceptions

### Questions

1. How can this approach be used to enforce preconditions?

## Model 12: Garbage Collection

### Questions

1. When is x discarded?
2. How does this differ from C++?
3. What are some strategies for determining when it is safe to garbage collect a variable?

## Submission

I encourage you to submit your answers to the questions (and ask your own questions!) using the Class Activity Questions discussion board. You may also respond to questions or comments made by others, or ask follow-up questions there. Answer any reflective prompt questions in the Reflective Journal section of your OneNote Classroom personal section. You can find the link to the class notebook on the syllabus.