SICPの問題解いてくよ-問題1.3

次は、問題1.3。3つの引数をとり、そのうち大きい2つの引数の2乗を足したもの返す関数を定義するという問題。

とりあえず、addpow :: (Num a) => a -> a -> aという、ふたつの引数の2乗を足す関数を定義。

addpow x y = (x*x) + (y*y)

あとは、if文で大小関係をもとめて、addpowにわたしてあげる。

twomax x y z = if ( x > y ) then  
if ( y < z ) then addpow x z else addpow x y else
 if ( z < x ) then addpow x y else addpow z y

また、長かったのでblogに書く際に改行いれました。で、実行。

haskell$ cat sicp1_3.hs
addpow x y = (x*x) + (y*y)
twomax x y z = if ( x > y ) then
if ( y < z ) then addpow x z else addpow x y
else if ( z < x ) then addpow x y else addpow z y


Hugs.Base> :l sicp1_3.hs
Main> twomax 2 3 4
25
Main> twomax 4 3 2
25
Main> twomax 4 2 3
25
Main> twomax 4 2 5
41
Main> twomax 4 2 4
32