Define a procedure that takes three numbers as arguments and returns the sum of squares of the two larger numbers
I broke this problem into 3 steps
square function which will take one argument and return its square.
(define (square x) (* x x)) ; (square 6) 36
sum-of-squares function which will take two arguments and calculate sum of their squares.
(define (sum-of-squares x y) (+ (square x) (square y))) ; (sum-of-squares 3 4) 25
max function which will take two numbers and return maximum of both numbers.
(define (max x y) (if (> x y) x y)) ; (max 3 4) 4
Now the solution to the problem is just combine all the 3 subproblems into one.
EDIT: In my earlier logic, i had a flaw. I was just passing
(max x y)
(max y z) to the
sum-of-squares function. Thanks to Ankur for pointing out the mistake. The second argument actually depends on the result of
(max x y).
(define (sum-of-squares-of-2-larger x y z) (sum-of-squares (max x y) (if (= (max x y) x) (max y z) (max x z) ))) ; (sum-of-squares-of-2-larger 1 2 3) 13 ; (sum-of-squares-of-2-larger 5 4 3) 41 ; (sum-of-squares-of-2-larger 1 3 2) 13
SICP chapter 1 tells about how problems can be solved by breaking them into smaller subproblems and then building from them and solving bigger problems.