型によるプログラミング 直積型と直和型 図形、円、正方形、長方形、外周、面積
入門Haskellプログラミング (Will Kurt(著)、株式会社クイープ(監修、翻訳)、翔泳社)のUNIT3(型によるプログラミング)、LESSON16(直積型と直和型)、16.54(練習問題)Q16-2の解答を求めてみる。
コード
type Radius = Double
type Length = Double
type Width = Double
type Height = Double
data Shape
= Circle Radius
| Square Length
| Rectangle Width Height
deriving (Show)
perimeter :: Shape -> Double
perimeter (Circle r) = 2 * r * pi
perimeter (Square l) = 4 * l
perimeter (Rectangle w h) = 2 * (w + h)
area :: Shape -> Double
area (Circle r) = r * r * pi
area (Square l) = l * l
area (Rectangle w h) = w * h
c :: Shape
c = Circle 2
s :: Shape
s = Square 3
r :: Shape
r = Rectangle 2 3
ss :: [Shape]
ss = [c, s, r]
main = do
mapM_
( \s ->
putStrLn $
show s ++ " 外周: "
++ show (perimeter s)
++ " 面積: "
++ show (area s)
)
ss
入出力結果(Terminal, Zsh)
% runghc sample2.hs
Circle 2.0 外周: 12.566370614359172 面積: 12.566370614359172
Square 3.0 外周: 12.0 面積: 9.0
Rectangle 2.0 3.0 外周: 10.0 面積: 6.0
%