Se consideran las figuras geométricas formadas por circulos (definidos por su radio) y rectángulos (definidos por su base y su altura). El tipo de las figura geométricas se define por
data Figura = Circulo Float | Rect Float Float |
data Figura = Circulo Float | Rect Float Float
Definir las funciones
area :: Figura -> Float
cuadrado :: Float -> Figura |
area :: Figura -> Float
cuadrado :: Float -> Figura
tales que
area f
es el área de la figura f
. Por ejemplo,
area (Circulo 1) == 3.1415927
area (Circulo 2) == 12.566371
area (Rect 2 5) == 10.0 |
area (Circulo 1) == 3.1415927
area (Circulo 2) == 12.566371
area (Rect 2 5) == 10.0
cuadrado n
es el cuadrado de lado n
. Por ejemplo,
Soluciones
A continuación se muestran las soluciones en Haskell y las soluciones en Python.
Soluciones en Haskell
data Figura = Circulo Float | Rect Float Float
area :: Figura -> Float
area (Circulo r) = pi*r^2
area (Rect x y) = x*y
cuadrado :: Float -> Figura
cuadrado n = Rect n n |
data Figura = Circulo Float | Rect Float Float
area :: Figura -> Float
area (Circulo r) = pi*r^2
area (Rect x y) = x*y
cuadrado :: Float -> Figura
cuadrado n = Rect n n
Soluciones en Python
from dataclasses import dataclass
from math import pi
@dataclass
class Figura:
"""Figuras geométricas"""
@dataclass
class Circulo(Figura):
r: float
@dataclass
class Rect(Figura):
x: float
y: float
def area(f: Figura) -> float:
match f:
case Circulo(r):
return pi * r**2
case Rect(x, y):
return x * y
assert False
def cuadrado(n: float) -> Figura:
return Rect(n, n) |
from dataclasses import dataclass
from math import pi
@dataclass
class Figura:
"""Figuras geométricas"""
@dataclass
class Circulo(Figura):
r: float
@dataclass
class Rect(Figura):
x: float
y: float
def area(f: Figura) -> float:
match f:
case Circulo(r):
return pi * r**2
case Rect(x, y):
return x * y
assert False
def cuadrado(n: float) -> Figura:
return Rect(n, n)