I have started to reading Structure and Interpretation of Computer Programs since last week. And I finished a few exercise of the first chapter. And this is one of them.

Exercise 1.3. Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers.

Following is my solution:

(define (min x y) (if (< x y) x y))

(define (min3 x y z) (min x (min y z)))

(define (square x) (* x x))

(define (sum_of_square x y)
(+ (square x) (square y)))

(define (sum_of_max_two_sqaure x y z)
(define min_num (min3 x y z))
(cond ((= min_num x) (sum_of_square y z))
((= min_num y) (sum_of_square x z))
(else sum_of_square x y)))

(sum_of_max_two_sqaure 1 2 3)