<p>I'm trying to learn scheme via SICP. Exercise 1.3 reads as follow: Define a procedure that takes three numbers as arguments and returns the sum of the squares of the two larger numbers. Please comment on how I can improve my solution.</p>

<pre><code>(define (big x y)
    (if (&gt; x y) x y))

(define (p a b c)
    (cond ((&gt; a b) (+ (square a) (square (big b c))))
          (else (+ (square b) (square (big a c))))))
</code></pre>

Looks ok to me, is there anything specific you want to improve on?
You could do something like:
```
```
(define (max2 . l)
  (lambda ()
    (let ((a (apply max l)))
      (values a (apply max (remv a l))))))

(define (q a b c)
  (call-with-values (max2 a b c)
    (lambda (a b)
      (+ (* a a) (* b b)))))

(define (skip-min . l)
  (lambda ()
    (apply values (remv (apply min l) l))))

(define (p a b c)
  (call-with-values (skip-min a b c)
    (lambda (a b)
      (+ (* a a) (* b b)))))
```
```
And this (proc p) can be easily converted to handle any number of arguments.