1.1 10 12 8 3 6 a b 19 #f 4 16 6 16
1.4 The operator of the procedure a-plus-abs-b is either addition or subtraction depending on an if statement which tests the sign of b. If b is negative, then to add its absolute value to a, the procedure must subtract the negative value.
1.5 An normal-order interpreter would return 0, while an applicative-order interpreter would not return anything. The applicative-order interpreter would substitute and evaluate (p) immediately, which would case an infinite loop at the first step of interpretation. The normal-order interpreter would never reach the alternative of the if conditional and would therefore never evaluate the problematic (p).
1.6 Because new-if is a standard procedure, each operand must be evaluated before the next step of the program.
1.7 For very small numbers, the tolerance of .001 is too large compared to the size of the numbers being tested, stopping the procedure before an adequate guess has been checked. For example, taking the square root of .0001 by this method stops at .0323. For large numbers, the program enters an infinite loop. Eventually a value will be rounded to fit into memory, halting the progress of refining the guess.
The improved (good-enough?): (define (good-enough? guess x) (< (abs (- (improve guess x) guess)) (* 0.001 guess)))