問題1.3

三つの数を引数として取り、大きい二つの数の二乗の和を返す手続きを定義せよ。

  • テキストで出てきた、square, sum-of-squaresを使いまわす
  • ソートする必要は無い、一番小さい数が分かればよい
(define (square x)
  (* x x))

;(square 5)
  
(define (sum-of-squares x y)
  (+ (square x) (square y)))

;(sum-of-squares 3 4) 
;(sum-of-squares 8 10) 

(define (big2-square x y z)
   (if (> x y)
       (if (> y z)
	   (sum-of-squares x y)
	   (sum-of-squares x z))
       (if (> x z)
	   (sum-of-squares y x)
	   (sum-of-squares y z))))

答えあわせにAnswerBookを見ると、よりエレガントな回答。
何というか、自分のコードはC言語っぽい感じが抜けていない気がする...。
式と値を別物として考えてしまうというか...。

(define (sum-of-squares-of-biggers x y z)
  (if (> x y)
      (sum-of-squares x (if (> y z) y z))
      (sum-of-squares y (if (> z x) z x))))