Comp210
; sub1sqrd: number --> number
; Given x, return x^2 - 2x +1.
;
(define add1-and-square
  (lambda (x)
    (+ (* x x) (* 2 x) 1)))
(+ (+ (add1-and-square (+ 3 4)) 5) (* 6 7))
  (+ (+ (add1-and-square (+ 3 4)) 5) (* 6 7))
                                     ^^^^^^^
= (+ (+ (add1-and-square (+ 3 4)) 5) 42)
                         ^^^^^^^
= (+ (+ (add1-and-square 7) 5) 42)
         ^^^^^^^^^^^^^^^
      ; Placeholder about to evaluate to it's defn:
= (+ (+ ((lambda (x) (+ (* x x) (* 2 x) 1)) 7) 5) 42)
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
 ; Eval a func-application: re-write the lambda's body, w/ 7 subbing for x:
= (+ (+ (+ (* 7 7) (* 2 7) 1) 5) 42)
                   ^^^^^^^
= (+ (+ (+ (* 7 7) 14 1) 5) 42)
           ^^^^^^^
= (+ (+ (+ 49 14 1) 5) 42)
        ^^^^^^^^^^^
= (+ (+ 64 5) 42)
     ^^^^^^^^
= (+ 69 42)
  ^^^^^^^^^
= 111
(+ 2 (* 4 5) 6)
     ^^^^^^^
(+ 2 20 6)
28
(* 6 7).
     What actually happens is that first 7
     is evaluated (to 7).  Then, 6 is evaluated (to 6);
     next the placeholder * is evaluated to its value
     (the primitive function multiplication;
     writing this abstract entity is
     difficult, but conventionally we write this with "*").
     All this, before we actually apply the primitive.
     For your hw (as in this example), you can skip the evaluation of values
     (like 6 and 7),
     and placeholders for primitives (*).