1.(e) This does NOT result in a divide-by-zero error, because operator and is a special form and does NOT necessarily evaluate all of its arguments. Specifically, it is short circuiting and only evaluates as many arguments as necessary to determine the result, starting from the first argument. (Operator or is analogously defined.) 2. ;; using the longhand w/ explicit lambda and standard define... (define avg2 (lambda (x1 x2) (/ (+ x1 x2) 2))) ;; using the define-for-functions syntactic shortcut... (define (avg2 x1 x2) (/ (+ x1 x2) 2)) 7. (define (mylength l) (if (equal? l ()) 0 (+ 1 (mylength (cdr l))))) A few remarks about the code... Note that operator equal? is used instead of = for testing equality with non-numeric values. Also note that () is not quoted, because () safely evaluates to itself---it's a list literal. Note that the base case's return value is not in parentheses. If it were, you would get an error, since Scheme would try to interpret (0) as a call to a zero-parameter function called "0". Putting just a 0 there is exactly what we want, since it will be evaluated to itself. see also: Scheme Basics (variable bindings, function definitions, conditionals)