-- Section 2.1.2
-- Exercise 2.2
type Point = (Float, Float)
make_point :: Float -> Float -> Point
make_point x y = (x, y)
x_point :: Point -> Float
x_point = fst
y_point :: Point -> Float
y_point = snd
print_point :: Point -> String
print_point p = "(" ++ (show $ x_point p)
++ "," ++ (show $ y_point p)
++ ")"
type Segment = (Point, Point)
make_segment :: Point -> Point -> Segment
make_segment p1 p2 = (p1, p2)
start_segment :: Segment -> Point
start_segment = fst
end_segment :: Segment -> Point
end_segment = snd
midpoint_segment :: Segment -> Point
midpoint_segment s = make_point ((x1 + x2) / 2) ((y1 + y2) / 2)
where x1 = x_point p1
x2 = x_point p2
y1 = y_point p1
y2 = y_point p2
p1 = start_segment s
p2 = end_segment s
-- Exercise 2.3
data Rectangle = DiagonalLine Segment
| DiagonalPoint Point Point
deriving (Show)
width_rectangle :: Rectangle -> Float
width_rectangle (DiagonalLine seg) = abs (x2 - x1)
where p1 = start_segment seg
p2 = end_segment seg
x1 = x_point p1
x2 = x_point p2
width_rectangle (DiagonalPoint p1 p2) = abs (x2 - x1)
where x1 = x_point p1
x2 = x_point p2
height_rectangle :: Rectangle -> Float
height_rectangle (DiagonalLine seg) = abs (y2 - y1)
where p1 = start_segment seg
p2 = end_segment seg
y1 = y_point p1
y2 = y_point p2
height_rectangle (DiagonalPoint p1 p2) = abs (y2 - y1)
where y1 = y_point p1
y2 = y_point p2
perimeter_rectangle :: Rectangle -> Float
perimeter_rectangle rec = 2 * (height_rectangle rec
+ width_rectangle rec)
area_rectangle :: Rectangle -> Float
area_rectangle rec = height_rectangle rec * width_rectangle rec
没有评论:
发表评论